Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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_Tsql - Fatal编程技术网

Sql 选择具有最新日期的唯一记录

Sql 选择具有最新日期的唯一记录,sql,tsql,Sql,Tsql,我正在尝试获取一个T-SQL查询,以从表中读取订单,并显示一段时间内(即过去7天)来自公司的最新订单。如果公司在此期间下了多个订单,则仅显示最新订单。我的查询在下面,并在后面生成结果。我想得到的结果是之后的表格 select StoreID, OrderID, ModDate from Orders where ModDate > (getdate() - 7) order by StoreID desc, ModDate desc 上述SQL的输出产生: St

我正在尝试获取一个T-SQL查询,以从表中读取订单,并显示一段时间内(即过去7天)来自公司的最新订单。如果公司在此期间下了多个订单,则仅显示最新订单。我的查询在下面,并在后面生成结果。我想得到的结果是之后的表格

select StoreID, OrderID, ModDate
    from Orders

    where ModDate > (getdate() - 7)
    order by StoreID desc, ModDate desc
上述SQL的输出产生:

StoreID  OrderID  ModDate
=======  =======  =======================
6093     188954   2018-08-31 12:56:09.690
6093     188883   2018-08-30 13:54:50.520
6092     189215   2018-09-06 11:01:35.257
5994     189182   2018-09-05 22:20:25.907
5994     189159   2018-09-05 17:11:22.200
5994     189169   2018-09-05 17:06:16.003
5994     189163   2018-09-05 16:04:23.683
5994     189123   2018-09-05 13:13:16.523
5994     189124   2018-09-05 13:10:30.750
我想要的输出:

StoreID  OrderID  ModDate
=======  =======  =======================
6093     188954   2018-08-31 12:56:09.690
6092     189215   2018-09-06 11:01:35.257
5994     189182   2018-09-05 22:20:25.907
我尝试使用distinct,希望它只选择StoreID,即选择distinct StoreID。。。但这没什么区别。要使此查询正常工作,我缺少什么?在最坏的情况下,我可以按原样使用数据,并且不让C显示重复的StoreID,但我更希望从良好的SQL获得正确的输出


谢谢。

您可以尝试按StoreID colunm制作行号,然后按ModDate desc下单

然后得到rn=1的数据

问题1:

:


谢谢你,施德。。。很好用
CREATE TABLE T(
   StoreID int,
   OrderID int,
   ModDate datetime
);




insert into t values (6093,188954,'2018-08-31 12:56:09.690');
insert into t values (6093,188883,'2018-08-30 13:54:50.520');
insert into t values (6092,189215,'2018-09-06 11:01:35.257');
insert into t values (5994,189182,'2018-09-05 22:20:25.907');
insert into t values (5994,189159,'2018-09-05 17:11:22.200');
insert into t values (5994,189169,'2018-09-05 17:06:16.003');
insert into t values (5994,189163,'2018-09-05 16:04:23.683');
insert into t values (5994,189123,'2018-09-05 13:13:16.523');
insert into t values (5994,189124,'2018-09-05 13:10:30.750');
select StoreID,OrderID,ModDate 
from (
    SELECT *,row_number() OVER(PARTITION BY StoreID  order by ModDate desc) rn
    FROM T
)t1
where rn = 1
| StoreID | OrderID |                  ModDate |
|---------|---------|--------------------------|
|    5994 |  189182 | 2018-09-05T22:20:25.907Z |
|    6092 |  189215 | 2018-09-06T11:01:35.257Z |
|    6093 |  188954 |  2018-08-31T12:56:09.69Z |