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+。。。我会重新写的