Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按日期发出订单_Sql_Sql Order By - Fatal编程技术网

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 ....