Сортировать по дате выпуска - PullRequest
0 голосов
/ 02 марта 2012

У меня есть таблица с двумя столбцами:

datecreated 
datemodified

Я написал следующий запрос для получения записей за последние 7 дней с сегодняшнего дня:

Select * from mytable
Where  ((datecreated < GETDATE() - 7) or 
(datemodified <> null or datemodified < GETDATE() - 7))
Order By datemodified, datecreated asc

Есть ли способупорядочить по разным столбцам, например, если у нас есть два модифицированных даты:

1. 29/02/2012
2. 01/03/2012

и дата создания:

1. 27/02/2012 
2. 28/02/2012

выбор будет возвращать дату, модифицированную от старой к недавней дате, и дату, созданную старой к недавней:

1. 29/02/2012
2. 01/03/2012
1. 27/02/2012 
2. 28/02/2012

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Следующее должно делать то, что вы ищете - оно сначала заказывает по дате, измененной, если она есть, и прикрепляет все без даты, измененной в конце, и упорядочивает их по дате создания.

SELECT *
FROM MyTable
WHERE (datecreated < getdate() - 7)
   OR (datemodified IS NOT NULL AND datemodified < getdate() - 7)
ORDER BY coalesce(datemodified, '1/1/9999', datecreated)

Редактировать

Я думаю, что неправильно понял набор результатов, который вы хотите. Если вы хотите, чтобы возвращалась только одна дата, то есть дата, модифицированная или созданная по дате, тогда вы выбираете следующее:

SELECT coalesce(datemodified, datecreated)
FROM ....
1 голос
/ 02 марта 2012

Не используйте <> с NULL, не все версии SQL поддерживают это, вместо этого используйте IS NULL.Есть несколько способов сделать это.В вашем случае вам, вероятно, понадобится UNION или UNION ALL, если вы хотите сохранить повторяющиеся значения.

SELECT     datecreated, datemodified
FROM         (SELECT     TOP (100) PERCENT datecreated, datemodified
                       FROM          mytable
                       WHERE      (datecreated > GETDATE() - 7)
                       ORDER BY datecreated)
UNION ALL
SELECT     datecreated, datemodified
FROM         (SELECT     TOP (100) PERCENT datecreated, datemodified
                       FROM          mytable
                       WHERE      (datemodified IS NULL) OR
                                              (datemodified > GETDATE() - 7)
                       ORDER BY datemodified)
...