我们有一个交易表,其中有以下列:
交易ID
发送日期
tx 用户
实体ID
交易金额
交易地点
我们想要获取某个用户在过去10天内完成了第二笔交易的所有交易及其交易详情。 这是使用的查询
CREATE TABLE Transaction_details(
tx_id int,
tx_date date,
tx_user varchar(50),
entity_id INT,
tx_amount DECIMAL(10,2),
tx_location VARCHAR(255),
);
INSERT INTO Transaction_details(tx_id,tx_date,tx_user,entity_id,tx_amount,tx_location)VALUES(1,'2024-04-20','Alice',101,50.00,'Seattle');
INSERT INTO Transaction_details(tx_id,tx_date,tx_user,entity_id,tx_amount,tx_location)VALUES(2,'2024-04-25','Bob',102,75.50,'New York');
INSERT INTO Transaction_details(tx_id,tx_date,tx_user,entity_id,tx_amount,tx_location)VALUES(3, '2024-04-28','Carol',103,30.20,'Los Angeles');
Select * from Transaction_details;
INSERT INTO Transaction_details(tx_id,tx_date,tx_user,entity_id,tx_amount,tx_location)VALUES(4,'2024-04-30','Alice',104,500.00,'Seattle');
INSERT INTO Transaction_details(tx_id,tx_date,tx_user,entity_id,tx_amount,tx_location)VALUES(5,'2024-05-08','Bob',105,70.00,'Chicago');
INSERT INTO Transaction_details(tx_id,tx_date,tx_user,entity_id,tx_amount,tx_location)VALUES(6,'2024-05-05','Alice',106,100.00,'Newyork');
SELECT *
FROM Transaction_details
WHERE tx_user IN (
SELECT tx_user
FROM (
SELECT tx_user, ROW_NUMBER() OVER (PARTITION BY tx_user ORDER BY tx_date) AS t
FROM Transaction_details
) AS numbered
WHERE t = 2
)
AND tx_date >=
(SELECT DATEDIFF(day,GETDATE(),'2022-04-04')from Transaction_details);
我的 MS sql 服务器在 tx_date 条件和年份 getdate 函数中显示错误消息)
不确定为什么有这么多子查询,或者为什么使用
DATEDIFF
而不是 DATEADD
。
看起来你只需要:
SELECT *
FROM (
SELECT
td.*,
ROW_NUMBER() OVER (PARTITION BY td.tx_user ORDER BY td.tx_date) AS t
FROM Transaction_details td
) AS numbered
WHERE t = 2
AND tx_date >= DATEADD(day, -10, GETDATE());