Sql,查找10天内的交易表

问题描述 投票:0回答:1

我们有一个交易表,其中有以下列:

交易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 函数中显示错误消息)

sql mysql
1个回答
0
投票

不确定为什么有这么多子查询,或者为什么使用

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());
© www.soinside.com 2019 - 2024. All rights reserved.