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

Sql 联接子查询并提取最近日期

Sql 联接子查询并提取最近日期,sql,sql-server,tsql,date,Sql,Sql Server,Tsql,Date,我有两张桌子: 客户 ID NAME 001 John 002 Sara 客户状况 CLIENT_ID STATUS DATE 001 3 2018-01-02 001 2 2018-01-04 002 2 2018-01-02 002 1 2018-01-03 我想按status=1筛选,我只想要指定时间范围内的最新日期 到目前为止,我有: DECLARE

我有两张桌子:

客户

ID   NAME
001  John
002  Sara
客户状况

CLIENT_ID   STATUS   DATE
001         3        2018-01-02
001         2        2018-01-04
002         2        2018-01-02
002         1        2018-01-03
我想按status=1筛选,我只想要指定时间范围内的最新日期

到目前为止,我有:

DECLARE 
    @StartDate  DATE,
    @EndDate    DATE
SET @StartDate  = '2016-07-01'    
SET @EndDate    = '2018-06-30'    

SELECT 
   c.NAME
 , c.ID
 , cs.STATUS
FROM CLIENT c
LEFT JOIN (
    SELECT cs.CLIENT_ID, cs.DATE 
    FROM CLIENT_STATUS 
    WHERE STATUS = 1 AND h.DATE BETWEEN @StartDate AND @EndDate
) AS hst ON hst.CLIENT_ID = c.ID
只是那不是最近的订单


请注意,这是较大查询的一部分。

与具有行号的子查询进行左或内联接:

SELECT *
FROM CLIENTS
LEFT JOIN (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY CLIENT_ID ORDER BY DATE DESC) AS rn
    FROM CLIENT_STATUS
    WHERE STATUS = 1
) RECENT_STATUS ON CLIENTS.ID = RECENT_STATUS.CLIENT_ID AND RECENT_STATUS.rn = 1
您可以使用行数函数:

SELECT TOP (1) WITH TIES c.ID, c.NAME, cs.DATE
FROM CLIENT c INNER JOIN
     CLIENT_STATUS cs
     ON cs.CLIENT_ID = c.ID 
WHERE cs.STATUS = 1 AND cs.DATE >= @StartDate AND cs.DATE <= @EndDate
ORDER BY ROW_NUMBER() OVER (PARTITION BY c.ID ORDER BY cs.DATE DESC);

我只想查看状态表中的状态=1,我想查看指定日期范围内的最新日期-这对我来说没有意义,你能将你想要的输出添加到你的问题中吗?哇,我刚才说什么了。。。语法A+。。。我会重新写的