Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.11;
Скачать: 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 вся ветка

Текущий архив: 2006.06.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
15-1147770025
Andy BitOff
2006-05-16 13:00
2006.06.11
Как отловить Stack overflow


9-1131305633
DK2DK2DK2
2005-11-06 22:33
2006.06.11
ландшафт,Объясните


2-1148658284
cardexc
2006-05-26 19:44
2006.06.11
bpl файл компонента


2-1148347973
Призрак
2006-05-23 05:32
2006.06.11
"промотать" Edit в конец


2-1148674496
ZV
2006-05-27 00:14
2006.06.11
SOUND