Вниз
Скачать: CL | DM;

Ув. мастера. Помогите разобраться с группировкой   Найти похожие ветки 

 
AversFm   (2006-05-25 17:34) [0]

Ув. мастера. Помогите разобраться с группировкой

Имеется условная таблица из четырех полей:

ID   HOLD      INDATE    NAME
 
 1  Склад1   01.01.2006 Товар1
 2  Склад2   04.01.2006 Товар1
 3  Склад3   05.01.2006 Товар1
 4  Склад1   01.01.2006 Товар2
 5  Склад2   08.01.2006 Товар2
 6  Склад3   02.01.2006 Товар2

Пытаюсь написать красивый запрос который возвращал бы те записи,  которых дата максимальна для комбинации (HOLD, NAME). Для вышеуказанного списка это будет две записи:

 3  Склад3   05.01.2006 Товар1
 5  Склад2   08.01.2006 Товар2


 
Desdechado ©   (2006-05-25 17:36) [1]

> Пытаюсь написать
и?
что уже напытался?


 
Johnmen ©   (2006-05-25 17:49) [2]

Да-да, текст попыток в студию! :)


 
AversFm   (2006-05-25 17:53) [3]

Опс... Не все сообщение в буфер кинул.

Ту так вот. Имеется ли способ, чтобы такого типа запросы делались
одним общим запросом? Получить максимальную дату не проблема, но как идентифицировать эту запись?


 
Johnmen ©   (2006-05-25 17:56) [4]

По максимальной дате в группе.
Если ты имеешь в виду, что неплохо бы узнать её ID, то надо ещё вложенный запрос в WHERE.


 
AversFm   (2006-05-25 18:01) [5]

select ID,  HOLD, min( INDATE),  NAME
from TABLE
group by ID,  HOLD,  NAME

не  подходит, т.к. мы получаем все записи.

select HOLD, min( INDATE),  NAME
from TABLE
group by HOLD,  NAME

тоже не подходит, так как мы не сможем идентифицировать записи.


 
AversFm   (2006-05-25 18:06) [6]


> По максимальной дате в группе.
> Если ты имеешь в виду, что неплохо бы узнать её ID, то надо
> ещё вложенный запрос в WHERE.


select ID,  HOLD, INDATE,  NAME
from TABLE
where INDATE IN ( select max(INDATE) from TABLE group by HOLD, NAME )

Например так?
Не пройдет, так как для разных камбинаций HOLD, NAME даты могут совпадать.


 
Desdechado ©   (2006-05-25 18:08) [7]

WHERE t.INDATE=(SELECT Max(t1.INDATE) FROM t1 WHERE t1.name=t.name)


 
AversFm   (2006-05-25 18:43) [8]


> Desdechado ©   (25.05.06 18:08) [7]
> WHERE t.INDATE=(SELECT Max(t1.INDATE) FROM t1 WHERE t1.name=t.
> name)


Спасибо, помогло. Теперь заработало.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.026 c
15-1147840595
Layner
2006-05-17 08:36
2006.06.11
ActiveX в браузере IE6, браузер постоянно пишет:


6-1137494084
Volf_555
2006-01-17 13:34
2006.06.11
Как автоматически из моей программы входить в почтовик?


4-1142686335
Вовка
2006-03-18 15:52
2006.06.11
FindResource не находит ресурс


2-1148704224
Ezorcist
2006-05-27 08:30
2006.06.11
Значение переменной "по-умолчанию"))))


3-1145436221
Alek
2006-04-19 12:43
2006.06.11
Строка в блоб поле....




   Наверх