Sql 按日期发出订单
我有一个包含两列的表:Sql 按日期发出订单,sql,sql-order-by,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 创建的日期为: 1. 2
datecreated
datemodified
我编写了以下查询以获取从今天开始的过去7天内的记录:
Select * from mytable
Where ((datecreated < GETDATE() - 7) or
(datemodified <> null or datemodified < GETDATE() - 7))
Order By datemodified, datecreated asc
创建的日期为:
1. 27/02/2012
2. 28/02/2012
select会将DATEMIFIED old返回到最近的日期,并将date created old返回到最近的日期:
1. 29/02/2012
2. 01/03/2012
1. 27/02/2012
2. 28/02/2012
不要与NULL一起使用,不是所有SQL版本都支持,而是使用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)
下面的操作应该满足您的要求--它首先按datemodified(如果有)排序,然后将所有没有datemodified的操作粘贴在末尾,并按datecreated排序
SELECT *
FROM MyTable
WHERE (datecreated < getdate() - 7)
OR (datemodified IS NOT NULL AND datemodified < getdate() - 7)
ORDER BY coalesce(datemodified, '1/1/9999', datecreated)
您可以使用具有两个不同选择的联合,但是,如果在过去7天内创建和修改了记录,那么您给出的示例将不起作用。您的意思是希望每个记录显示两次(一次显示其修改日期,一次显示其创建日期)@jzworkman否这些是单独的记录您当前的select语句将无法按您的要求工作。首先,它给出了创建日期在7天前的行,这与过去7天内的行相反。其次,它将为您提供所有具有任何datemodified值的记录--应该是AND,而不是where的第二部分中的OR。您是说希望所有具有datemodified值的行都首先按该值排序,然后,所有其他没有datemodified的行都将根据其datecreated值进行排序?@patmortech是的,这是正确的,我想要7天前的所有记录。。至于你的第二个问题,是的,那会起作用。这不会起作用,就像我把desc按顺序排列一样,它将返回datemodified desc和datecreated desc,如下所示:1。29/02/2012 2. 01/03/2012 2. 28/02/2012 1. 2012年2月27日修改后的答案。这是你想要的吗?
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 ....