我想要一个列来关注与其组没有匹配日期的行。 所以当州和城市相同但日期不同时,显示“日期不匹配”。
资料:
状态 | 城市 | 日期 |
---|---|---|
德克萨斯州 | 奥斯汀 | 2023 |
德克萨斯州 | 奥斯汀 | 2023 |
德克萨斯州 | 奥斯汀 | 2020 |
德克萨斯州 | 休斯顿 | 2023 |
德克萨斯州 | 休斯顿 | 2023 |
我的示例代码:
SELECT
State,
City,
Date,
CASE
WHEN --Logic here --
THEN 'Date Mismatch'
ELSE NULL
END
FROM
Table
WHERE
State IN (SELECT state FROM table GROUP BY state, city, date)
AND
City IN (SELECT city FROM table GROUP BY state, city, date)
预期效果:
状态 | 城市 | 日期 | 支票专栏 |
---|---|---|---|
德克萨斯州 | 奥斯汀 | 2023 | 日期不匹配 |
德克萨斯州 | 奥斯汀 | 2023 | 日期不匹配 |
德克萨斯州 | 奥斯汀 | 2020 | 日期不匹配 |
德克萨斯州 | 休斯顿 | 2023 | |
德克萨斯州 | 休斯顿 | 2023 |
您可以为此使用窗口函数。简单比较
MIN
和MAX
SELECT *,
Checks =
CASE WHEN MIN(Date) OVER (PARTITION BY State, City)
<> MAX(Date) OVER (PARTITION BY State, City)
THEN 'Date Mismatch' END
FROM YourTable t;
您可以使用 WINDOW FUNCTION(DENSE_RANK) 来查找 DistincCount 日期
然后检查 DistincCount 以获取支票列日期
;with _City_State as (
select state
,city
,dates
, DENSE_RANK() OVER (PARTITION BY state,city ORDER BY dates ASC) +
DENSE_RANK() OVER (PARTITION BY state,city ORDER BY dates DESC) - 1 AS DistincCount
from City_State
)
select
state
,city
,dates as date
,case when DistincCount=1 then '' else 'Date Mismatch' end as [Checks Column]
from _City_State
您可以使用以下语句插入基础数据:
drop table if exists City_State
create table City_State (state nvarchar(100), city nvarchar(100), dates varchar(4));
insert into City_State values ('Texas', 'Austin', '2023')
insert into City_State values ('Texas', 'Austin', '2023')
insert into City_State values ('Texas', 'Austin', '2020')
insert into City_State values('Texas', 'Houston', '2023')
insert into City_State values('Texas', 'Houston', '2023')