按日期排序问题

时间:2012-03-02 16:54:38

标签: sql sql-order-by

我有一个包含两列的表格:

datecreated 
datemodified

我写了以下查询以获取今天过去7天内的记录:

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

有没有办法按不同的列进行订购,例如如果我们有两个datemodified:

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

和datecreated是:

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

select会将datemodified old返回到最近创建的日期和日期以及最近的日期:

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

2 个答案:

答案 0 :(得分:1)

请勿使用&lt;&gt;如果使用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)

答案 1 :(得分:1)

以下内容应该按照您的要求进行操作 - 首先按日期修改订单(如果有的话),并在最后修改所有未修改日期的订单,并按日期创建订购。

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

修改

我想我误读了你想要的结果集。如果只需要返回一个日期,即datemodified或datecreated,则将select更改为以下内容:

SELECT coalesce(datemodified, datecreated)
FROM ....