Скажите пожалуйста, возможно ли написать запрос к БД, при такой задаче:
Есть таблица:
table1
------------
id
num
flag
date
Пример:
id num flag date
--- ----- ----- -----
1 | 1 | 0 | 1.01.2010
2 | 1 | 1 | 6.01.2010
3 | 1 | 0 | 4.01.2010
4 | 2 | 0 | 1.01.2010
5 | 2 | 0 | 4.01.2010
6 | 3 | 0 | 1.01.2010
7 | 3 | 1 | 3.01.2010
8 | 3 | 0 | 2.01.2010
Необходимо выбрать num на последнюю дату, и сначала вывести все флаги = 0(приоритет для флагов=0).
В результате должно получиться:
id num flag date
--- ----- ----- -----
5 | 2 | 0 | 4.01.2010
7 | 3 | 1 | 3.01.2010
2 | 1 | 1 | 6.01.2010
Я сделала, так:
SELECT num FROM table1 ORDER BY flag, date
но у меня значения num дублируются для обоих флагов( как этого избежать?
Distinct(num) не работает, видимо потому что флаги разные.
Спустя 1 час, 43 минуты, 12 секунд (1.08.2010 - 14:25) REANIMATOR написал(а):
вообщето это distinct, а не Distingt
Спустя 2 часа, 12 минут, 12 секунд (1.08.2010 - 16:37) arvitaly написал(а):
select id,num,flag,date from table1 order by flag, date desc group by date
Только date лучше переименовать - системное слово
Спустя 14 часов, 14 минут, 32 секунды (2.08.2010 - 06:51) zvezda_t написал(а):
Цитата (arvitaly @ 1.08.2010 - 13:37) |
select id,num,flag,date from table1 order by flag, date desc group by date |
к сожалению не работает(
Вышла ошибка:
Incorrect syntax near the keyword 'group'.
Спустя 21 минута, 32 секунды (2.08.2010 - 07:13) zvezda_t написал(а):
SELECT num, MAX(date1) FROM dbo.table1
Group By num ORDER BY MAX(date1)
такой запрос вывел все num на максимальную дату и отсортировал по дате.
А как дополнительно отсортировать еще и по флагу?
Пример:
id num flag date
--- ----- ----- -----
1 | 1 | 0 | 1.01.2010
2 | 1 | 1 | 6.01.2010
3 | 1 | 0 | 4.01.2010
4 | 2 | 0 | 1.01.2010
5 | 2 | 0 | 4.01.2010
6 | 3 | 0 | 1.01.2010
7 | 3 | 1 | 3.01.2010
8 | 3 | 0 | 2.01.2010
Результат запроса:
num date
----- -----
3 | 3.01.2010
2 | 4.01.2010
1 | 6.01.2010
строки:
7 | 3 | 1 | 3.01.2010
5 | 2 | 0 | 4.01.2010
2 | 1 | 1 | 6.01.2010
полученные строки нужно отсортировать по флагу :
должно быть:
5 | 2 | 0 | 4.01.2010
7 | 3 | 1 | 3.01.2010
2 | 1 | 1 | 6.01.2010
Спустя 44 минуты, 31 секунда (2.08.2010 - 07:58) zvezda_t написал(а):
блин( самое ужасное - что при таком запросе
я не могу id строки получить...
что же делать?
SELECT num, MAX(date1) FROM dbo.table1
Group By num ORDER BY MAX(date1)
я не могу id строки получить...
что же делать?
Спустя 1 час, 14 минут, 47 секунд (2.08.2010 - 09:12) zvezda_t написал(а):
есть решение:
SELECT t1.*
FROM dbo.table1 t1
right join (select num, MAX(date1) maxdate
from table1
Group By num) t2 on t2.maxdate=t1.date1 and t1.num=t2.num
ORDER BY t1.flag, t1.date1
_____________
Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)