После прочтения Stackoverflow в течение некоторого времени, сегодня моя очередь задавать вопрос!
Структура таблицы
Это связано с запросом к базе данных SQL Server 2005. У меня есть следующая структура таблицы:
компоненты
загрузка
- ID
- componententid (FK для компонентов # id)
- downloaddate
импорт
- ID
- downloadid (FK to downloads # id)
- состояние
Что я хочу получить
Я пытаюсь получить статус последней загрузки для каждого компонента.
Где я до сих пор
Я начал писать этот запрос, но мое соединение работает не очень хорошо:
SELECT c.id
FROM components as c
JOIN (
SELECT componentid, MAX(downloaddate) as downloaddate, id
FROM downloads
GROUP BY componentid, id
) d ON d.componentid = c.id
-- JOIN on imports here...
Моя проблема в том, что запрос, используемый для объединения, неверен. Поскольку мне нужно выбрать идентификатор для объединения, я добавил его в предложение group by и теперь получаю несколько записей для каждого компонентного элемента вместо самого последнего.
Вот что я получу, если выполню запрос в соединении самостоятельно.
componentid downloaddate id
8882 2011-01-15 06:00:09.773 595862
8882 2011-01-16 06:00:09.847 598422
8882 2011-01-17 06:00:09.940 600971
8951 2010-11-15 03:00:22.550 450221
8951 2010-11-16 03:00:21.730 452431
8951 2010-11-17 03:00:21.920 454668
8961 2011-01-17 02:00:33.077 600532
8961 2011-01-17 02:00:59.070 600536
8983 2008-07-17 11:59:53.780 122
9005 2009-09-01 04:00:38.320 48918
9005 2009-09-02 04:00:36.260 49280
Вместо этого мне нужно что-то вроде этого:
componentid downloaddate id
8882 2011-01-17 06:00:09.940 600971
8951 2010-11-17 03:00:21.920 454668
8961 2011-01-17 02:00:59.070 600536
8983 2008-07-17 11:59:53.780 122
9005 2009-09-02 04:00:36.260 49280
Кто-нибудь знает, как мне написать свое объединение, чтобы достичь ожидаемого результата?
Заранее большое спасибо