gpt4 book ai didi

sql - 需要根据当前日期选择重复项

转载 作者:行者123 更新时间:2023-12-01 05:50:52 25 4
gpt4 key购买 nike

我有样本数据

Name    Product Prd_cnt Prd_dt
BSA CYCLE 20 29-01-2019
BSA CYCLE 20 28-01-2019
BSA CYCLE 20 27-01-2019
BSA CYCLE 20 26-01-2019
BSA CYCLE 40 25-01-2019
BSA CYCLE 35 24-01-2019
BSA CYCLE 35 23-01-2019
BSA CYCLE 35 22-01-2019

即使日期不同,我也需要选择过去 4 天具有相同计数的记录。从当前日期到过去 4 天。如果其中一项记录与过去 4 天不同。不需要那些记录。

输出:
Name  Product   Prd_cnt   Prd_dt
BSA CYCLE 20 29-01-2019
BSA CYCLE 20 28-01-2019
BSA CYCLE 20 27-01-2019
BSA CYCLE 20 26-01-2019

我试过使用 ROW_NUMBER并拥有 COUNT() .

最佳答案

我会简单地使用 exists .

首先,创建并填充示例表( 在您以后的问题中保存我们这一步):

CREATE TABLE T(
Name VARCHAR(50),
Product VARCHAR(50),
Prd_cnt INT,
Prd_dt DATE
);

INSERT INTO T (Name, Product, Prd_cnt, Prd_dt) VALUES
('BSA','CYCLE',20,'2019-01-29'),
('BSA','CYCLE',20,'2019-01-28'),
('BSA','CYCLE',20,'2019-01-27'),
('BSA','CYCLE',20,'2019-01-26'),
('BSA','CYCLE',40,'2019-01-25'),
('BSA','CYCLE',35,'2019-01-24'),
('BSA','CYCLE',35,'2019-01-23'),
('BSA','CYCLE',35,'2019-01-22'),
('BSA','CYCLE',40,'2019-01-21');

然后,一个简单的公用表表达式和一个存在子查询:
WITH CTE AS
(
SELECT Name,Product,Prd_cnt,Prd_dt
FROM T As t0
WHERE Prd_dt <= GETDATE()
AND Prd_dt >= CAST(DATEADD(DAY, -3, GETDATE()) As Date)
)
SELECT Name,Product,Prd_cnt,Prd_dt
FROM CTE As t0
WHERE EXISTS
(
SELECT 1
FROM CTE As t1
WHERE t0.Prd_dt <> t1.Prd_dt
AND t0.Prd_cnt = t1.Prd_cnt
)

公用表表达式选择最近四天的所有记录,而exists 仅过滤具有重复Prd_cnt 值的记录。
请注意,如果您希望重复项也考虑其他列,您所要做的就是将它们添加到存在子查询 where 子句中。

感谢 D-Shih 为 DDL+DML 示例数据创建了一个 fiddle 。

关于sql - 需要根据当前日期选择重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54417688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com