надеялся, что кто-нибудь может мне помочь с этим: Моя таблица:
id Version datetime name resource
---|--------|------------|--------|---------
1 | 1 | 03/03/2009 | con1 | 399
2 | 2 | 03/03/2009 | con1 | 244
3 | 3 | 01/03/2009 | con1 | 555
4 | 1 | 03/03/2009 | con2 | 200
5 | 2 | 03/03/2009 | con2 | 500
6 | 3 | 04/03/2009 | con2 | 600
7 | 4 | 31/03/2009 | con2 | 700
Мне нужно выбрать каждое отдельное «имя», которое имеет наибольшее значение «дата / время», которое меньше или равноданная дата;и где версия является максимальной версией, если существует несколько записей, которые удовлетворяют первому условию.
Результат, если указанная дата была '04/03/2009', был бы:
id Version datetime name resource
---|--------|------------|--------|---------
2 | 2 | 03/03/2009 | con1 | 244
6 | 3 | 04/03/2009 | con2 | 600
В настоящее время я создал следующий запрос, который работает, но я подозреваю, что это нелучше всего, когда речь заходит о производительности при работе на большом столе:
SELECT [id], [Version], [datetime], [name], [resource]
FROM theTable
WHERE [Version] =
(
SELECT MAX(Version) FROM theTable AS theTable2 WHERE theTable.[name] = theTable2.[name]
AND theTable2.[datetime] =
(
SELECT MAX(theTable3.[datetime]) FROM theTable AS theTable3
WHERE theTable2.[name] = theTable3.[name] AND theTable3.[datetime] <= '04/03/2009'
)
)
Буду признателен, если кто-нибудь предложит более эффективный способ сделать это;и, если возможно, приведите пример: -).
Заранее спасибо.