powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка значений по максимальной дате
60 сообщений из 60, показаны все 3 страниц
Выборка значений по максимальной дате
    #36647334
Phricker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Существует таблица pay
idpdateidentsumm...101.01.2010jasp10...221.03.2010alex15...316.08.2009jasp15...401.10.2009julia20...504.12.2009alex30...

Мне необходимо выбрать строки по каждому ident с максимальной датой.

Пишу запрос:
Код: plaintext
1.
2.
3.
4.
SELECT summ, 
ident,
MAX (pdate)
FROM pay
GROUP BY (summ, ident)

Но все равно выдает все строки...

Где моя ошибка?
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #36647343
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
SELECT * FROM pay
WHERE (id, pdate) IN
   (SELECT id, MAX(pdate) FROM pay
    GROUP BY id)
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #36647364
Phricker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоже самое. выдает все значения.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #36647383
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sorry, ошибся.
Вместо ID нужно поставить IDENT
Код: plaintext
1.
2.
3.
SELECT * FROM pay
WHERE (ident, pdate) IN
   (SELECT ident, MAX(pdate) FROM pay
    GROUP BY ident)
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #36647387
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Phrickerтоже самое. выдает все значения.

GROUP BY id ent
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #36647468
xx_xx_xxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
select ident, max(pdate), sum(summ) keep(dense_rank first order by pdate desc)
from pay
group by ident
хотя может и не то....
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #36647478
Coolibin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только нужно решить, что делать со случаем, когда на максимальную дату есть несколько записей.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #36647873
Phricker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое.
Все получилось.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #36647875
Phricker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CoolibinТолько нужно решить, что делать со случаем, когда на максимальную дату есть несколько записей.
не суть важно. нужна именно дата последнего платежа. чтобы отследить активность.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #36648001
Data Type
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PhrickerCoolibinТолько нужно решить, что делать со случаем, когда на максимальную дату есть несколько записей.
не суть важно. нужна именно дата последнего платежа. чтобы отследить активность.

Если у вас дата со временем, то подойдет и первый вариант, если без времени, то через first функцию
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #36648060
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Data TypeЕсли у вас дата со временемВ данных либо могут быть повторы либо не могут. Единственным зыбким подтверждением может служить констрейнт, но не предположения разработчика или уверения бизнес-аналитика. Поэтому вопрос только по требованиям к результату, но не к степени дискретизации исходных данных.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #36648183
Data Type
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,

Хотя вы правы, в постановке задачи не сказано про целостность данных, что просил автор, то и предложили.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #36648202
Dragon Luck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PhrickerCoolibinТолько нужно решить, что делать со случаем, когда на максимальную дату есть несколько записей.
не суть важно. нужна именно дата последнего платежа. чтобы отследить активность.

не понимаю
если нужна только дата что бы отследить активность зачем тогда выбирать сумму можно же обойтись только group by
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Выборка значений по максимальной дате
    #38483027
bandyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
All, помогите мне плиз

ORACLE запрос:

select distinct
ENT.TITLE_SURNAME, ENT.NAME, ENT.OTCHESTVO, ENT.BIRTHDAY,
GUN.SERIES, GUN.NUMB, GUN.MAKE_YEAR,
CGUN.MODEL_TITLE, CGUN.CALIBR_CODE_1, CGUN.CALIBR_CODE_2, CGUN.CALIBR_CODE_3, CGUN.CALIBR_CODE_4,
CGUN.KINDGUN_CODE, CGUN.TYPE_GUN_CODE,
DOC.DOC_NAME||' '||DOC.DOC_SERIES||' '||DOC.DOC_NUMB||' от '||DOC.DOC_DATE as DOCS,
ENDS.END_DATE
from
ENT_PERSONS ENT,
DOC_RELATIONS SV,
GUN_GUNS GUN,
CODE_GUN CGUN,
DOC_DOCUMENTS_DOC_RELATIONS DRL,
DOC_DOCUMENTS DOC,
DOC_PERMISSIONS ENDS
where
ENT.TITLE_SURNAME='ФАМИЛИЯ' and ENT.NAME='ИМЯ' and ENT.OTCHESTVO='ОТЧЕСТВО' and ENT.BIRTHDAY='01.01.1985' and
ENT.ID=SV.EP_ID and SV.STATE=6 and SV.GUN_ID is not null and
SV.GUN_ID=GUN.ID and SV.ID=DRL.DRL_ID and DRL.DDC_ID=DOC.ID and ENDS.DDC_ID=DRL.DDC_ID and
CGUN.CODE=GUN.CODEGUN_CODE

1. Поле ENDS.END_DATE - Как вывести максимальную дату?
max(ENDS.END_DATE) over(partition by ENDS.END_DATE) - не помогает, выводит все даты
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #38483093
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bandyn
Код: plsql
1.
max(ENDS.END_DATE) over(partition by ENDS.END_DATE)



----
Ramin Hashimzade
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #38483096
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
черт тег не взял )))
Ramin Hashimzadebandyn
Код: plsql
1.
max(ENDS.END_DATE) over()



----
Ramin Hashimzade



----
Ramin Hashimzade
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #38483116
bandyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ramin Hashimzade,

так выводятся тоже кол-во записей, но дата становится у всех максимальная!
т.е. выводилась 2 записи с разными датами -> выводятся те же 2 записи но уже с одинак датами
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #38483122
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bandynRamin Hashimzade,

так выводятся тоже кол-во записей, но дата становится у всех максимальная!
т.е. выводилась 2 записи с разными датами -> выводятся те же 2 записи но уже с одинак датами
а ты что хочешь? Как задал вопрос так и получил ответ....
если не укстраивает и думать для тебя проблема , открой новый топик, приведи тестовые данные и покажи жел. резултат.

----
Ramin Hashimzade
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #38483134
Фотография Corner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bandynКак вывести максимальную дату?
вам ответили на этот вопрос

других условий вы не озвучивали. а теперь говорите
bandynтак выводятся тоже кол-во записей, но дата становится у всех максимальная!
сформулируйте конкретно свой вопрос. или сами додумайте куда групировку вставить.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #38483136
bandyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ramin Hashimzade,

надо чтобы выводилась та запись, у которой дата максимальная
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #38483153
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bandynRamin Hashimzade,

надо чтобы выводилась та запись, у которой дата максимальная
хорошо подкину нить...
1) order by mydate desc ) where rownum <= 1 (не всегда правильно)
2) dense_rank() over (mydate desc) r ) where r = 1
3) max(....) keep( dense_rank first mydate desc) group by ...


----
Ramin Hashimzade
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Выборка значений по максимальной дате
    #39310013
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подниму тему, отчет отягощен именно тем, что дата двоится вплоть до секунд.

То есть есть товар,цена, дата, есть еще в той же таблице некое поле L, строки отличаются только этим L

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT DP.ID,DP.NAME,T.PRICE,T.DATE
FROM
 DP JOIN T ON T.PRODUCT=DP.ID
  JOIN
   (SELECT PRODUCT,MAX(DATE) TD FROM T
   GROUP BY PRODUCT) DTM 
 ON T.PRODUCT=DTM.PRODUCT AND T.DATE=DTM.TD
ORDER by DP.NAME ASC



Я понимаю, что это ошибка оператора, что он в один документ впихнул строки по одному и тому же продукту с разной ценой и провел одной и той же датой. L получается идентификатор строки.
Как сюда впихнуть еще хотя бы максимум по L?

Смотрела как делает разработчик, он берет весь перечень продуктов и идет по списку для каждого товара делает
Код: sql
1.
2.
3.
SELECT PRICE
FROM
 (SELECT PRICE FROM T ORDER BY DATE DESC) T1 WHERE ROWNUM <= 1



То есть и пустые цены конечно тоже берет, но мне пустые не надо.
Вчера трассировала это у пользователя, 40 минут, трассировка 2 гигабайта заняла.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39310015
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон удалила лишнего

SELECT PRICE
FROM
(SELECT PRICE FROM T WHERE PRODUCT=:P ORDER BY DATE DESC) T1 WHERE ROWNUM <= 1
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39310019
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845,
добавте в сортировку поле L

ps
не совсем понял что Вам надо, покажите на примере

.....
stax
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39310051
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне нижняя сортировка не интересна, выбирать все значения и по ним идти циклом, это утопия.

Надо такой же запрос как верхний, но с учетом, что внутри товара будет выбран максимум по DATE, а внутри даты будет максимум по L, то есть

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT DP.ID,DP.NAME,T.PRICE,T.DATE
FROM
 DP JOIN T ON T.PRODUCT=DP.ID
  JOIN
   (SELECT PRODUCT,MAX(L) TL,MAX(DATE) TD FROM T
   GROUP BY PRODUCT) DTM 
 ON T.PRODUCT=DTM.PRODUCT AND T.DATE=DTM.TD AND T.L=DTM.TL
ORDER by DP.NAME ASC



это не правильно, потому что в данном случае L будет максимум по всему продукту, хотя там где максимальная дата теоретически и L тоже максимально, теоретически (но не забываем всякие ввели задним числом и т.д.)...

С другой стороны задумалась, это запрос для того чтобы показать цену покупателю на некоем ресурсе, если на ресурсе будет максимум цены, а покупатель придет в магазин и увидит цену меньше, то явно он не будет жаловаться.
Раз уж тут явный косяк оператора, может там где дата совпадает указать из двух цен большую, и не париться.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39310080
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845,

last не подойдет?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  1  with t as (
  2  SELECT 1 PRODUCT,date '2016-09-03' L ,date '2016-09-01' dat FROM dual union all
  3  SELECT 1 PRODUCT,date '2016-09-01' L ,date '2016-09-02' FROM dual union all
  4  SELECT 1 PRODUCT,date '2016-09-02' L ,date '2016-09-03' FROM dual union all
  5  SELECT 1 PRODUCT,date '2016-09-01' L ,date '2016-09-03' FROM dual union all
  6  SELECT 2 PRODUCT,date '2016-08-22' L ,date '2016-08-02' FROM dual union all
  7  SELECT 2 PRODUCT,date '2016-08-21' L ,date '2016-08-02' FROM dual
  8  )
  9  select
 10   product
 11  ,max(l) KEEP (DENSE_RANK last ORDER BY dat) tl
 12  ,max(dat) td
 13  from t
 14* group by product
SQL> /

   PRODUCT TL       TD
---------- -------- --------
         1 02.09.16 03.09.16
         2 22.08.16 02.08.16



.....
stax
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39310116
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

Спасибо, работает так как надо, причем даже совпадает с теми данными, которые выходят у разработчика, не смотря на то, что у него сортировка в подзапросе только по дате, проверила не одно задвоение.

Я сначала думала, что если у него сортирует по дате, то дальше сортировка по умолчанию ROWID ASC, возможно так и есть.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39310120
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не, по ROWID как раз другой результат выходит.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39310191
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845stax..,

Спасибо, работает так как надо, причем даже совпадает с теми данными, которые выходят у разработчика, не смотря на то, что у него сортировка в подзапросе только по дате, проверила не одно задвоение.

Я сначала думала, что если у него сортирует по дате, то дальше сортировка по умолчанию ROWID ASC, возможно так и есть.
по умолчанию на ROWID полагаться не стоит

зы
если я правильно понял задачку через KEEP DENSE_RANK LAST можно сразу и PRICE вытаскивать (без JOIN)

......
stax
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39310729
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

Ты имеешь ввиду вот так

Код: sql
1.
max(price) KEEP (DENSE_RANK last ORDER BY dat) tl



Для максимума цены по максимальной дате достаточно, но логически не верно, за одну и ту же дату до секунд по идее последняя цена будет не та, которая больше, а которая по L больше, потому что позже внесена и для нее L как ид позже выделен.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39310730
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще думаю стоит переделывать запрос через левый джойн или не стоит.

По идее нужны товары по которым есть четко и цена и количество, то есть если цену не передавали вроде как и не надо или если количество нулевое.

С другой стороны может покупатель ассортимент посмотреть хочет, а есть оно у нас или нет дело десятое, а с третей посмотрит и что, цены нет, количество нулевое, не будет же сидеть и ждать пока появится.

Хомяков вон джунгарских на магазине вообще -3 числится, хомяки мрут...
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39310731
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845Для максимума цены по максимальной дате достаточно, но логически не верно, за одну и ту же дату до секунд по идее последняя цена будет не та, которая больше, а которая по L больше, потому что позже внесена и для нее L как ид позже выделен.Ну так досортируй.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39311332
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845Вообще думаю стоит переделывать запрос через левый джойн или не стоит.

По идее нужны товары по которым есть четко и цена и количество, то есть если цену не передавали вроде как и не надо или если количество нулевое.

С другой стороны может покупатель ассортимент посмотреть хочет, а есть оно у нас или нет дело десятое, а с третей посмотрит и что, цены нет, количество нулевое, не будет же сидеть и ждать пока появится.

Хомяков вон джунгарских на магазине вообще -3 числится, хомяки мрут...

переделать или нет Вам решать
если задачка свежая я б переделал (древнее не трогаю)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SQL> ed
Wrote file afiedt.buf

  1  with t as (
  2   SELECT 1 PRODUCT,date '2016-09-03' L ,date '2016-09-01' dat,10 price FROM dual union all
  3   SELECT 1 PRODUCT,date '2016-09-01' L ,date '2016-09-02',20 FROM dual union all
  4   SELECT 1 PRODUCT,date '2016-09-02' L ,date '2016-09-03',30 FROM dual union all
  5   SELECT 1 PRODUCT,date '2016-09-01' L ,date '2016-09-03',40 FROM dual union all
  6   SELECT 2 PRODUCT,date '2016-08-22' L ,date '2016-08-02',50 FROM dual union all
  7   SELECT 2 PRODUCT,date '2016-08-21' L ,date '2016-08-02',60 FROM dual
  8  )
  9   select
 10    product
 11   ,max(l) KEEP (DENSE_RANK last ORDER BY dat) tl
 12   ,max(dat) td
 13   ,max(price) KEEP (DENSE_RANK last ORDER BY dat,l) tl
 14   from t
 15* group by product
SQL> /

   PRODUCT TL       TD               TL
---------- -------- -------- ----------
         1 02.09.16 03.09.16         30
         2 22.08.16 02.08.16         50



.......
stax
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39311348
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я понял, ищется простая и эффективная реализация top-N запроса по ценам товара, сам товар берется из каталога.
обратите внимание на статью xtender-а:
http://orasql.org/2012/09/21/distinct-values-by-index-topn/
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39313317
попробуй так, может получится

SELECT summ,
ident,
MAX(pdate) OVER (PARTITION BY ident)
FROM pay
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39313849
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Влепила это по итогу в шапку и сделала максимум по цене там где дата до секунд совпадает.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT * FROM 
(SELECT DP.ID,DP.CODE,DP.NAME,
     (SELECT
      NVL(max(PRICE) KEEP (DENSE_RANK last ORDER BY DATE),0) PRICE
      FROM DT
      WHERE DP.ID=DT.PRODUCT) PRICE
FROM
 DP)
WHERE PRICE>0
ORDER BY name1 ASC,name asc



Пока не знаю надо там список с пустыми ценами или нет.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39314452
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845Хомяков вон джунгарских на магазине вообще -3 числится, хомяки мрут...

case им сделай хотя бы :)
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39314870
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845Влепила это по итогу в шапку и сделала максимум по цене там где дата до секунд совпадает.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT * FROM 
(SELECT DP.ID,DP.CODE,DP.NAME,
     (SELECT
      NVL(max(PRICE) KEEP (DENSE_RANK last ORDER BY DATE),0) PRICE
      FROM DT
      WHERE DP.ID=DT.PRODUCT) PRICE
FROM
 DP)
WHERE PRICE>0
ORDER BY name1 ASC,name asc



Пока не знаю надо там список с пустыми ценами или нет.

про секунды не понял
но с учетом "а которая по L больше", я БЫ сортировочку по L добавил ORDER BY DATE,L

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
SQL> l
  1  with dt as (
  2   SELECT 1 PRODUCT,date '2016-09-03' L ,date '2016-09-01' dat,10 price FROM dual union all
  3   SELECT 1 PRODUCT,date '2016-09-01' L ,date '2016-09-02',20 FROM dual union all
  4   SELECT 1 PRODUCT,date '2016-09-02' L ,date '2016-09-03',30 FROM dual union all
  5   SELECT 1 PRODUCT,date '2016-09-01' L ,date '2016-09-03',40 FROM dual union all
  6   SELECT 2 PRODUCT,date '2016-08-22' L ,date '2016-08-02',50 FROM dual union all
  7   SELECT 2 PRODUCT,date '2016-08-21' L ,date '2016-08-02',60 FROM dual
  8  )
  9  ,dp as (
 10  select 1 id,'stax' code ,'Stanislav' name from dual union all
 11  select 2 id,'nata' code ,'Natali' name from dual
 12  )
 13  SELECT * FROM
 14  (SELECT DP.ID,DP.CODE,DP.NAME,
 15       (SELECT
 16        NVL(max(PRICE) KEEP (DENSE_RANK last ORDER BY DAT),0) PRICE
 17        FROM DT
 18        WHERE DP.ID=DT.PRODUCT) PRICE
 19  FROM
 20   DP)
 21  WHERE PRICE>0
 22* ORDER BY name ASC,code asc
SQL> /

        ID CODE NAME           PRICE
---------- ---- --------- ----------
         2 nata Natali            60
         1 stax Stanislav         40

SQL>
SQL> ed
Wrote file afiedt.buf

  1  with dt as (
  2   SELECT 1 PRODUCT,date '2016-09-03' L ,date '2016-09-01' dat,10 price FROM dual union all
  3   SELECT 1 PRODUCT,date '2016-09-01' L ,date '2016-09-02',20 FROM dual union all
  4   SELECT 1 PRODUCT,date '2016-09-02' L ,date '2016-09-03',30 FROM dual union all
  5   SELECT 1 PRODUCT,date '2016-09-01' L ,date '2016-09-03',40 FROM dual union all
  6   SELECT 2 PRODUCT,date '2016-08-22' L ,date '2016-08-02',50 FROM dual union all
  7   SELECT 2 PRODUCT,date '2016-08-21' L ,date '2016-08-02',60 FROM dual
  8  )
  9  ,dp as (
 10  select 1 id,'stax' code ,'Stanislav' name from dual union all
 11  select 2 id,'nata' code ,'Natali' name from dual
 12  )
 13  SELECT * FROM
 14  (SELECT DP.ID,DP.CODE,DP.NAME,
 15       (SELECT
 16        NVL(max(PRICE) KEEP (DENSE_RANK last ORDER BY DAT,L),0) PRICE
 17        FROM DT
 18        WHERE DP.ID=DT.PRODUCT) PRICE
 19  FROM
 20   DP)
 21  WHERE PRICE>0
 22* ORDER BY name ASC,code asc
SQL> /

        ID CODE NAME           PRICE
---------- ---- --------- ----------
         2 nata Natali            50
         1 stax Stanislav         30



.....
stax
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39315043
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..но с учетом "а которая по L больше", я БЫ сортировочку по L добавил ORDER BY DATE,L 19676439
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39315288
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

С учетом поставленной задачи я решила плюнуть на L, чисто логически если рассуждать я не знаю как передаются эти задвоенные цены на кассу, передаются они скорее всего в xml, а как там дальше загружается и в каком порядке...

Получается, что покупатель увидит на сайте одну цену, даже закажет товар может быть по этой цене, придет в магазин, а там цена выше, выйдет скандалъ.
Пусть она лучше на сайте будет больше, зато потом будет приятный сюрприз. Приятные сюрпризы лучше, чем неприятные.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39315627
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845stax..,

С учетом поставленной задачи я решила плюнуть на L, чисто логически если рассуждать я не знаю как передаются эти задвоенные цены на кассу, передаются они скорее всего в xml, а как там дальше загружается и в каком порядке...

Получается, что покупатель увидит на сайте одну цену, даже закажет товар может быть по этой цене, придет в магазин, а там цена выше, выйдет скандалъ.
Пусть она лучше на сайте будет больше, зато потом будет приятный сюрприз. Приятные сюрпризы лучше, чем неприятные.
добейте постановщиков, на тему какая цена будет "на касе"

ведь может быть и обратный ефект, зашел я на ваш сайт, посмотрем цену, дорого, и купил в другом магазине, а ведь в касе дешевле было

.....
stax
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39315797
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

К сожалению такое двоение цены на кассе результат рукожопства оператора, да и случается оно раз в пол года, и перекрывается видимо вдогонку новым документом на ценообразование, по крайней мере среди текущих цен на данном отделе я такой цены не увидела, все перекрыты новыми датами.
И в скриптах разработчика я видела отчеты, которые считают и так и так, в частности там был вариант

Substr(max(to_char(date,'yyyymmddhh24miss')||price),15,19)

Что в общем то аналогично вашему варианту, но возможно работает на ранних версиях тоже.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39315812
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845Что в общем то аналогично вашему варианту, но возможно работает на ранних версиях тоже.
Если price у вас number, то не совсем идентично
Код: plsql
1.
2.
with t as (select 1000 a from dual union all select 200 a from dual)
select Substr(max(to_char(sysdate,'yyyymmddhh24miss')||a),15,19) from t
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39315837
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j2k,

Черт, и правда выбирают как бог на душу положит.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39315879
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845j2k,

Черт, и правда выбирают как бог на душу положит.
а скорее всего уже символьное раз a),15,19

по старинке так и делали
||to_char(a,'09999999999999999.99999999')


Выбор максимальной записи по определенному полю

.....
stax
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Выборка значений по максимальной дате
    #39665160
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то заплутала, есть запрос акций типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT 
 DL.PRODUCT DPID, DA.ID DAID, DD.F14745601 FROM_DATE, DD.F14745602 TO_DATE,
  NVL(DL.F62455833,0) CEN_PRICE,  NVL(F28835874,0) CNT,
    CASE WHEN DD.F33620496='88000000000B232A' THEN 7
         WHEN DD.F33620496='88000000000B2329' THEN 8 END DOC_TYPE
  FROM DOCUMENT DD JOIN LINE DL ON DD.ID=DL.DOCUMENT
  JOIN AGENT DA ON DA.ID=DD.DEPARTMENT
  WHERE ((DD.CLASS=14417922) AND (DD.TYPE=28835915)) AND 
    (DD.F33620496 IN ('88000000000B232A','88000000000B2329')
     OR DD.F6684705='07D2000307D20002'
     AND (DD.F14286862='07D2000307D20002' OR DD.F14286862 IS NULL))
  AND DD.STATE=1
  AND DA.CLASS=2 AND DA.TYPE=14745607 
  AND DD.F14745602>=TO_DATE('20180622 16:00:00','YYYYMMDD hh24:mi:ss')



Выбирает все акции актуальные на текущий момент, для всех товаров и всех отделов

Как из этого отобрать те акции, которые для данного товара будут ближайшие, потому что если DD.F14745602 ставить текущую, могут попасть те акции, которые заведены на будущее, таких мало, но есть вероятность.

Понимаю, что в скобки обвести и выбрать
SELECT DPID,DAID,MIN(FIRST_DATE), а как сюда остальные поля по строке включить?
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39665182
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант с
Код: sql
1.
2.
3.
4.
5.
6.
SELECT DPID, DAID, MIN(FROM_DATE),
    MIN(TO_DATE) KEEP (DENSE_RANK first ORDER BY FROM_DATE) TO_DATE,
    MIN(CEN_PRICE) KEEP (DENSE_RANK first ORDER BY FROM_DATE) CEN_PRICE,
    MIN(CNT) KEEP (DENSE_RANK first ORDER BY FROM_DATE) CNT,
    MIN(DOC_TYPE) KEEP (DENSE_RANK first ORDER BY FROM_DATE) DOC_TYPE FROM
...



поняла, но по сути он не совсем корректен, могут попасть не те данные, если дата у двух акций одна и та же (что маловероятно), прочие данные будут путаться как попало, а хотелось бы брать данные точно по ид документа у которого дата ближайшая и ид меньше, наверное так.

Добавить туда DD.ID и сделать order by DD.ID

Или за одну и ту же дату сказать сами дураки и ничего не делать...
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39665184
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845,

AND DD.F14745602<=sysdate

.....
stax
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39665196
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа такого

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT DPID, DAID, MIN(FROM_DATE) FROM_DATE,
    MIN(TO_DATE) KEEP (DENSE_RANK first ORDER BY FROM_DATE,DDID) TO_DATE,
    MIN(CEN_PRICE) KEEP (DENSE_RANK first ORDER BY FROM_DATE,DDID) CEN_PRICE,
    MIN(CNT) KEEP (DENSE_RANK first ORDER BY FROM_DATE,DDID) CNT,
    MIN(DOC_TYPE) KEEP (DENSE_RANK first ORDER BY FROM_DATE,DDID) DOC_TYPE FROM
  (SELECT /*+FIRST_ROWS(1)  INDEX(T18546854 DB1_DOCUMENT_BY_TYPE_DATE)*/ 
  DL.PRODUCT DPID, DA.ID DAID, DD.ID DDID, DD.F14745601 FROM_DATE, DD.F14745602 TO_DATE,
  NVL(DL.F62455833,0) CEN_PRICE,  NVL(F28835874,0) CNT,
    CASE WHEN DD.F33620496='88000000000B232A' THEN 7
         WHEN DD.F33620496='88000000000B2329' THEN 8 END DOC_TYPE
  FROM DOCUMENT DD JOIN LINE DL ON DD.ID=DL.DOCUMENT
  JOIN AGENT DA ON DA.ID=DD.DEPARTMENT
  WHERE ((DD.CLASS=14417922) AND (DD.TYPE=28835915)) AND 
    (DD.F33620496 IN ('88000000000B232A','88000000000B2329')
     OR DD.F6684705='07D2000307D20002'
     AND (DD.F14286862='07D2000307D20002' OR DD.F14286862 IS NULL))
  AND DD.STATE=1
  AND DA.CLASS=2 AND DA.TYPE=14745607 
  AND DD.F14745602>=TO_DATE('20180601 00:00:00','YYYYMMDD hh24:mi:ss')
) 
  GROUP BY DPID,DAID
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39665202
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

DD.F14745602 это как раз дата прекращения, надо те которые на текущий момент не прекращены.

Текущий момент можно допустим и так задавать, но так как у нас выгрузка программой делается от момента до момента (этот запрос часть общего запроса), то мы засекаем текущий момент при запуске программы и его посылаем в запрос.

С минимумом вроде тоже разобралась
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39665226
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845,

Просто интересно. Откуда столь мнемоничные названия полей "F14745602", "F14286862"?
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39665234
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egoр,

Система наподобие 1С, названия полей формирует сама.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39665238
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845Egoр,

Система наподобие 1С, названия полей формирует сама.
Умно. Хитро. 8-|
Имхо, лучше не использовать свои SQL-запросы в системе с такими названиями полей.
Подозреваю, что тут имена подвержены изменению. Причем без оповещения со стороны системы.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39665250
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egoр,

Не, вроде пока не было инцидентов, а данные выгружать надо.

Ужасная система на самом деле, в некоторые таблицы добавлено по 800 столбцов, разработчики добавляли для всех клиентов учитывая все пожелания, в итоге понятно, что мы большую часть не используем, но размеры таблиц...
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39665285
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845поняла, но по сути он не совсем корректен, могут попасть не те данные, если дата у двух акций одна и та же (что маловероятно), прочие данные будут путаться как попало, а хотелось бы брать данные точно по ид документа у которого дата ближайшая и ид меньше, наверное так.

Добавить туда DD.ID и сделать order by DD.ID

Или за одну и ту же дату сказать сами дураки и ничего не делать...

непонятно что есть "дата ближайшая и ид меньше"
возможно Вам надо
Код: plsql
1.
2.
3.
4.
select * from
 (select ...
    ,row_number() over (partition by id order by dat ) rn 
 ) where rn=1



ps
c "сами дураки и ничего не делать" долго не протянете

.....
stax
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39665303
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну к примеру есть акция, которая начинается сегодня, есть акция, которая начинается завтра, из двух должен выбрать сегодняшнюю.

Если так получится, что на этот товар на сегодня заведут две разных акции с одинаковой датой начала, то хотя бы взять ту, которую завели раньше, чтобы все прочие данные в строке прошли по тому же ID, а не получилось что это значение от одного документа, это от второго.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39665370
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845Ну к примеру есть акция, которая начинается сегодня, есть акция, которая начинается завтра, из двух должен выбрать сегодняшнюю.

Если так получится, что на этот товар на сегодня заведут две разных акции с одинаковой датой начала, то хотя бы взять ту, которую завели раньше, чтобы все прочие данные в строке прошли по тому же ID, а не получилось что это значение от одного документа, это от второго.
с мін/мах у Вас так и получится
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  1  with t (id,shara,dat,percent) as (
  2  select 1,1001,date '2018-06-25',7 from dual union all
  3  select 1,1002,date '2018-07-01',5 from dual union all
  4  select 2,2002,date '2018-06-21',3 from dual)
  5  select id,min(shara),min(dat) dat, min(percent) percent
  6  from t
  7* group by id
SQL> /

        ID MIN(SHARA) DAT         PERCENT
---------- ---------- -------- ----------
         1       1001 25.06.18          5
         2       2002 21.06.18          3




1) row_number
2) keep last/first
3) dat=(select min(dat) from t t2 where t2.id=t.id)
4) ...

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> ed
Wrote file afiedt.buf

  1  with t (id,shara,dat,percent) as (
  2  select 1,1001,date '2018-06-25',7 from dual union all
  3  select 1,1002,date '2018-07-01',5 from dual union all
  4  select 2,2002,date '2018-06-21',3 from dual)
  5  select * from (
  6  select id,shara,dat, percent
  7    ,row_number() over (partition by id order by dat) rn
  8  from t)
  9* where rn=1
SQL> /

        ID      SHARA DAT         PERCENT         RN
---------- ---------- -------- ---------- ----------
         1       1001 25.06.18          7          1
         2       2002 21.06.18          3          1

SQL>



ps
допускаю что и ник Вам система сгеннерила

....
stax
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39665575
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ник от чата остался, забыла как их были чаты такие с викторинами еще, не аська а параллельно с ней. Ирц.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39665576
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Что то в этом есть, а с другой стороны если взять данные, упорядочить по дате, ид, и потом взять ферст, то по идее кругом эти данные будут принадлежать одной и той же записи ид.
...
Рейтинг: 0 / 0
Выборка значений по максимальной дате
    #39665718
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845Stax,

Что то в этом есть, а с другой стороны если взять данные, упорядочить по дате, ид, и потом взять ферст, то по идее кругом эти данные будут принадлежать одной и той же записи ид.

как будете брать ферст?

.....
stax
...
Рейтинг: 0 / 0
60 сообщений из 60, показаны все 3 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка значений по максимальной дате
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]