У меня есть небольшая головоломка SQL Distinct, которую я не могу решить (или, по крайней мере, не очень элегантно).
У меня есть две таблицы (постарайтесь не обращать внимания на простоту примера). Я использую MSSQL 2008, если это имеет большое значение.
Таблица: Категория
| categoryId (uniqueidentifier) PK |
| Name varchar(50) |
Таблица: Скачать
| downloadId (uniqueidentifier) PK |
| categoryId (uniqueidentifier) FK |
| url (varchar(max)) |
| createdate (datetime) |
У меня есть несколько категорий в таблице категорий и потенциально много URL-адресов для загрузки в таблице загрузок. Я заинтересован в выборе новейшей версии с использованием созданной (или топ-5, если это возможно) ссылки для загрузки каждой категории из таблицы загрузок.
В настоящее время я делаю следующее, но это не очень хорошо, и вряд ли может быть правильным способом сделать это.
SELECT
categoryId,
max(convert(BINARY(16),downloadId)) as downloadId,
max(createdate) as createdate
INTO tmp
FROM Download
GROUP BY categoryId
ORDER BY createdate
SELECT url
FROM Download
WHERE downloadId IN
(SELECT CONVERT(uniqueidentifier, downloadId) FROM tmp)
DROP Table tmp
Любые предложения будут высоко оценены.