19:55

All of the love we left behind watching the flashbacks intertwine. I think our lives have just begun.
Народ, помогите, пожалуйста, с запросом, я уже весь мозг себе сломала.
Есть у меня табличка Objects с полями - Id, ParentId, CreateDate, где Id - уникальный Guid-идентификатор, ParentId - родитель нашего объекта, у него может быть несколько наследников, и CreateDate - дата создания объекта. Мне нужно получить список Id (и только их, т.к. это подзапрос, результатом которого должна быть таблица с 1 колонкой айдишников), сгруппированных по ParentId с последней датой создания, то есть если у нас есть таблица:

Id ---------- ParentId ---------- CreateDate

E534F45F-11A2-4984-82EB-0002FDF37AC5 ---------- 68076EC1-CA15-48D5-BBA4-026CE2460EED ---------- 2006-12-18 12:48:20.000
56019FB7-5B9E-4C18-99D8-0003572EAB46 ---------- C1EBB20E-629C-4D13-87F6-000256EF6F94 ---------- 2008-10-28 11:47:11.140
3B91844A-C9FE-4F11-A458-00039BB5EA45 ---------- 68076EC1-CA15-48D5-BBA4-026CE2460EED ---------- 2011-08-01 11:06:51.030
E533DBD1-B648-48D3-A823-0004ADC68050 ---------- C1EBB20E-629C-4D13-87F6-000256EF6F94 ---------- 2012-02-02 10:00:25.287
59F87EB5-3B25-48EB-8F51-00062A9C3F5E ---------- 68076EC1-CA15-48D5-BBA4-026CE2460EED ---------- 2009-08-11 10:19:40.893

то результатом должна быть таблица:

Id
3B91844A-C9FE-4F11-A458-00039BB5EA45
E533DBD1-B648-48D3-A823-0004ADC68050

Я понимаю, что для этих нужд сделали Group by, и вот запрос, который я смогла родить:



Но в этом случае таблица даст 2 колонки, а мне нужна только одна. Но убрать MAX(CreateDate) из SELECT я не могу, потому что иначе не будет вычисляться максимальная дата. Есть идеи как переписать запрос?

АПД. Причем мой запрос ничего не изменит, т.к. при выводе Id группировка бессмысленна.

@темы: База данных, MS SQL

Комментарии
20.03.2013 в 20:47

Жизнь прекрасна!
Самый простой способ - сделай select по id от текущего запроса, если он у тебя верно работает. :laugh: БД под рукой нет, более рационального рабочего варианта предложить не могу
20.03.2013 в 20:59

All of the love we left behind watching the flashbacks intertwine. I think our lives have just begun.
Elijah.Ulesko, а можно подробнее? Не могу же я написать:



Он просто не будет работать.
20.03.2013 в 21:06

Жизнь прекрасна!
А самый первый запрос работает?
20.03.2013 в 21:37

Жизнь прекрасна!
Вероятно что-то такое будет работать:

20.03.2013 в 22:17

All of the love we left behind watching the flashbacks intertwine. I think our lives have just begun.
А самый первый запрос работает?
Работает, но не совсем верно.

Вероятно что-то такое будет работать:
Ок, я завтра попробую и отпишусь. Спасибо!
21.03.2013 в 10:07

All of the love we left behind watching the flashbacks intertwine. I think our lives have just begun.
Elijah.Ulesko, нет, запрос работает не совсем верно. У меня CreateDate может быть одинаковым вплоть до секунды (большая бд), поэтому он может соединять не те объекты между собой.
Я тут думаю - может создать таблицу и присвоить ей результат SELECT? Только я не знаю как. Вернее, гугл предлагает сделать SELECT INTO new_table, но далее эту новую таблицу уже нельзя использовать, как будто значение присвоилось - и все. Что с этим делать даже не представляю.
21.03.2013 в 10:27

All of the love we left behind watching the flashbacks intertwine. I think our lives have just begun.
А, я просто неправильно объявила. В общем, запрос в итоге такой:



И дальше в своем запросе я уже использую:


21.03.2013 в 11:25

Those wings... I want them too.
Abigail, Насколько я помню, в условии джойна можно указывать несколько колонок. Т.е. может быть запрос Elijah.Ulesko просто подправить?


21.03.2013 в 12:09

All of the love we left behind watching the flashbacks intertwine. I think our lives have just begun.
https, можно в общем-то и так, не придется память на новую таблицу тратить) спасибо!
21.03.2013 в 12:18

Those wings... I want them too.