我有一个包含两列的表格:
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
答案 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 ....