Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL [D5, MSSQL]


MakNik ©   (2003-12-19 10:29:00) 

Подскажите, плз., как заставить такой запрос работать?
Select ID, MAX(Cr.DateCreateCard) from Cards Cr
Group by CR.INN


Sandman25   (2003-12-19 11:24:00) [1]

[17] Shirson © (19.12.03 11:21)

Тоже верно :)


Shirson   (2003-12-19 11:21:00) [2]

IMHO, это нам есть куда расти. :)


Sandman25   (2003-12-19 11:13:00) [3]

[15] Johnmen © (19.12.03 11:10)

На примере таких задач начинаю понимать, что языку SQL есть куда расти. Вроде бы примитивнейшая операция, а нормально не указать :(


Johnmen   (2003-12-19 11:10:00) [4]

>Sandman25 ©

Да. Мой набросок некорректен...:)
Отчасти потому, что может быть более одного id за одну дату с одним inn...


Sandman25   (2003-12-19 11:07:00) [5]

[12] Sandman25 © (19.12.03 10:58)

Лучше игнорировать. Слишком медленно работает :(


Sandman25   (2003-12-19 11:00:00) [6]

[11] Плохиш_ (19.12.03 10:58)

where c2.ID=c1.ID

?

Я уже написал правильную версию в [8]. Сделал на основе Вашей идеи.


Sandman25   (2003-12-19 10:58:00) [7]

[9] MakNik © (19.12.03 10:55)

Кстати, если таких строк (с максимальной датой)для одного inn несколько, то можно поставить извлечение только одной из них.

select id from cards c1 where not exists
(select 1 from cards c2 where c1.inn=c2.inn
and c1.DateCreateCard <= c2.DateCreateCard and c1.id < c2.id)


Плохиш_   (2003-12-19 10:58:00) [8]

>Sandman25 © (19.12.03 10:49) [6]

:-( Поторопился и забыл

Select c1.ID from Cards c1 where
c1.DateCreateCard =
(select MAX(DateCreateCard) from Cards c2
where c2.ID=c1.ID
Group by INN)


Sandman25   (2003-12-19 10:56:00) [9]

[7] Johnmen © (19.12.03 10:52)

У меня на это ругается The column idd must be in the group by list


MakNik   (2003-12-19 10:55:00) [10]


> Sandman25 © (19.12.03 10:49) [6]

Спасибо, работает!!!


Sandman25   (2003-12-19 10:53:00) [11]

select id from cards c1 where DateCreateCard =
(select max(DateCreateCard) from cards c2 where c1.inn=c2.inn)


Johnmen   (2003-12-19 10:52:00) [12]

Примерно так
SELECT
(SELECT T1.ID FROM Table T1 WHERE T2.ID=T1.ID) IDD,
MAX(T2.DateCreateCard),
T2.INN
FROM Table T2
GROUP BY T2.INN


Sandman25   (2003-12-19 10:49:00) [13]

[5] Плохиш_ (19.12.03 10:46)

DateCreateCard не уникальное поле.


Плохиш_   (2003-12-19 10:46:00) [14]

>MakNik © (19.12.03 10:40) [3]

Так ты над своим селектом логически по-мысли ;-)

Select ID from Cards where
DateCreateCard = (select MAX(DateCreateCard) from Cards
Group by INN)


Sandman25   (2003-12-19 10:45:00) [15]

select id from cards c1 where not exists
(select 1 from cards c2 where c1.inn=c2.inn
and c1.DateCreateCard < c2.DateCreateCard)


MakNik   (2003-12-19 10:40:00) [16]


> Johnmen © (19.12.03 10:29) [1]

Есть таблица:
ID DateCreateCard INN
------------------------
1 12.12.2003 123
2 13.12.2003 123
3 12.12.2003 222
4 11.12.2003 222
5 15.12.2003 123
...

Нужно получить: ID-ку записи с максимальной датой для каждого набора с одинаковым INN. т.е получить след.:

ID DateCreateCard INN
------------------------
312.12.2003 222
515.12.2003 123


Silver Alex   (2003-12-19 10:35:00) [17]

на выбор :)

Select CR.INN , MAX(Cr.DateCreateCard) from Cards Cr
Group by CR.INN


Johnmen   (2003-12-19 10:29:00) [18]

Select ID, MAX(Cr.DateCreateCard) from Cards Cr
Group by ID


Наверх

Титульная страница Поиск, карта сайта Написать письмо