Цитата(РомаZ @ 09.06.11, 14:35)
Примерно так:
// Входные параметры:
// @someDate: DATETIME
SELECT
srcTable.id
,srcTable.Name
,srcTable.someOtherProperty
,srcTable.Date AS [Дата последнего изменения]
,@someDate AS [Дата среза]
FROM
dbTable AS srcTable // отсюда получаем информацию по id-ам из constraintaTable
INNER JOIN
( // Получение последних идентификаторов на дату с дополнительными условиями
SELECT
dbTable.id,
max(dbTable.data)
FROM dbTable
WHERE dbTable.data < @someDate
AND дополнительные условия на отбор по данным таблицы
) AS constraintTable
ON srcTable.id = constraintTable.id
AND srcTable.data = constraintTable.data
забыл "Group By".
Вот код с исправлением:
// Входные параметры:
// @someDate: DATETIME
SELECT
srcTable.id
,srcTable.Name
,srcTable.someOtherProperty
,srcTable.Date AS [Дата последнего изменения]
,@someDate AS [Дата среза]
FROM
dbTable AS srcTable // отсюда получаем информацию по id-ам из constraintaTable
INNER JOIN
( // Получение последних идентификаторов на дату с дополнительными условиями
SELECT
dbTable.id,
max(dbTable.data)
FROM dbTable
WHERE dbTable.data < @someDate
// AND дополнительные условия на отбор по данным таблицы
[b]GROUP BY dbTable.id[/b]
) AS constraintTable
ON srcTable.id = constraintTable.id
AND srcTable.data = constraintTable.data
Не взлетит, потому что вложенный запрос:
SELECT
dbTable.id,
max(dbTable.data)
FROM dbTable
WHERE dbTable.data < @someDate
вернет все записи
Это делается не так