Red*_*vil 2 sql t-sql sql-server sql-server-2012
我有一个场景,其中 IFID和Code是InsertDate相同的,如果它是第一个条目,那么它将是 0,否则是 1。
演示数据:
CREATE TABLE #test
(
ID int,
code int,
InsertDate datetime2
)
Insert into #test values (1,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (1,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (1,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (2,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (3,1,'2019-09-17 03:19:00.0000000')
Run Code Online (Sandbox Code Playgroud)
预期产出
ID code InsertDate flag
-----------------------------------------
1 1 2019-09-17 03:19:00.0000000 0
1 1 2019-09-17 03:19:00.0000000 1
1 1 2019-09-17 03:19:00.0000000 1
2 1 2019-09-17 03:19:00.0000000 0
3 1 2019-09-17 03:19:00.0000000 0
Run Code Online (Sandbox Code Playgroud)
我尝试过的
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY ID, Code, Insertdate ORDER BY InsertDate) flag
FROM #test
Run Code Online (Sandbox Code Playgroud)
这样我就得到了最初的逻辑,但接下来我需要帮助做什么。
一个简单的CASE表达可能会有所帮助:
SELECT
*,
CASE
WHEN ROW_NUMBER() OVER (PARTITION BY ID, Code, Insertdate ORDER BY InsertDate) = 1 THEN 0
ELSE 1
END AS Flag
FROM #test
Run Code Online (Sandbox Code Playgroud)