我有两张桌子
guid | id | Status
-----| -----| ----------
1 | 123 | 0
2 | 456 | 3
3 | 789 | 0
另一张表是
id | modified date | Status
------| --------------| ----------
1 | 26-08-2017 | 3
1 | 27-08-2017 | 0
1 | 01-09-2017 | 0
1 | 02-09-2017 | 0
2 | 26-08-2017 | 3
2 | 01-09-2017 | 0
2 | 02-09-2017 | 3
3 | 01-09-2017 | 0
3 | 02-09-2017 | 3
3 | 03-09-2017 | 0
每次第一个表中的状态都会针对每个ID进行更改时,它还会修改第二个表中的日期和状态。就像ID 1状态更改了4次。
我希望通过连接其第一个修改日期的状态值为0的两个表来选择这些ID。 在这个例子中,它应该只返回id 3,因为只有id 3的状态值为0,它在第一个修改日期01-09-2017.Ids 1& 2在其第一个修改日期中具有值3。
任何帮助
答案 0 :(得分:1)
尝试使用以下(假设第一个表为A,第二个表为B):
;with cte as (
Select a.id, b.Status, row_number() over(partition by a.id order by [modified date] asc) row_num
from A
inner join B
on a.id = b.id
)
Select * from cte where
status = 0 and row_num = 1
答案 1 :(得分:0)
认为这会做你想要的。
WITH cte
AS (SELECT id
, ROW_NUMBER() OVER (PARTITION BY (id) ORDER BY [modified date]) RN
, Status
FROM SecondTable
)
SELECT *
FROM FirstTable
JOIN cte ON FirstTable.id = cte.id
AND RN = 1
WHERE cte.Status = 0
只需展开*并返回您需要的字段。