我在 Oracle 11G 中有这个
Transactions
表。请不要评判我提出的问题。
表格有列:
id (guid type)
sender_name
transaction_date
amount
sender_address
sender_phone
receiver_name
transaction_date
列的格式类似于2014-11-30 04:26:29.000000
。
我想要的是:显示
Transactions
表中的所有数据,其中那些连续 5 天汇款并在给定 sender_name
中发送 amount
超过 1000 的人。即使,例如transaction_date between 01.01.2023 to 01.10.2023
在4月份连续5天汇款,6月份也有连续5天汇款显示全部。
有人可以告诉我该怎么做吗?我尝试了这些以及与这些问题相关的一些内容:
sender_name
分析函数来查找连续天的组。然后,对于每个组,您可以找到开始日期和结束日期,并筛选出仅包含 5 天或更多天的行:
DENSE_RANK
对于样本数据:
sender_name
输出:
TRANSACTION_DATE | ||
---|---|---|
2014-11-28 03:26:29.000000000 | 2222 | |
2014-11-27 02:26:29.000000000 | 1111 | |
2014-11-26 01:26:29.000000000 | 4444 | |
2014-11-29 04:26:29.000000000 | 5555 | |
2014-11-30 05:26:29.000000000 | 1234 | |
2014-11-28 03:26:29.000000000 | 8888 | |
2014-11-27 02:26:29.000000000 | 9999 | |
2014-11-26 01:26:29.000000000 | 4567 | |
2014-11-28 08:26:29.000000000 | 5678 | |
2014-12-01 05:26:29.000000000 | 3456 | |
2014-11-30 05:26:29.000000000 | 2345 | |
2014-11-29 04:26:29.000000000 |
CREATE TABLE transactions (id, sender_name, transaction_date) AS
SELECT '1111', 'Alice', TIMESTAMP '2014-11-26 01:26:29' FROM DUAL UNION ALL
SELECT '2222', 'Alice', TIMESTAMP '2014-11-27 02:26:29' FROM DUAL UNION ALL
SELECT '3333', 'Alice', TIMESTAMP '2014-11-28 03:26:29' FROM DUAL UNION ALL
SELECT '4444', 'Alice', TIMESTAMP '2014-11-29 04:26:29' FROM DUAL UNION ALL
SELECT '5555', 'Alice', TIMESTAMP '2014-11-30 05:26:29' FROM DUAL UNION ALL
SELECT '6666', 'Betty', TIMESTAMP '2014-11-30 05:26:29' FROM DUAL UNION ALL
SELECT '7777', 'Betty', TIMESTAMP '2014-11-30 05:26:29' FROM DUAL UNION ALL
SELECT '9999', 'Carol', TIMESTAMP '2014-11-26 01:26:29' FROM DUAL UNION ALL
SELECT '8888', 'Carol', TIMESTAMP '2014-11-27 02:26:29' FROM DUAL UNION ALL
SELECT '1234', 'Carol', TIMESTAMP '2014-11-28 03:26:29' FROM DUAL UNION ALL
SELECT '4567', 'Carol', TIMESTAMP '2014-11-28 08:26:29' FROM DUAL UNION ALL
SELECT '2345', 'Carol', TIMESTAMP '2014-11-29 04:26:29' FROM DUAL UNION ALL
SELECT '3456', 'Carol', TIMESTAMP '2014-11-30 05:26:29' FROM DUAL UNION ALL
SELECT '5678', 'Carol', TIMESTAMP '2014-12-01 05:26:29' FROM DUAL UNION ALL
SELECT '9999', 'Debra', TIMESTAMP '2014-11-26 01:26:29' FROM DUAL UNION ALL
SELECT '8888', 'Debra', TIMESTAMP '2014-11-27 02:26:29' FROM DUAL UNION ALL
SELECT '1234', 'Debra', TIMESTAMP '2014-11-28 03:26:29' FROM DUAL UNION ALL
SELECT '4567', 'Debra', TIMESTAMP '2014-11-28 08:26:29' FROM DUAL UNION ALL
SELECT '2345', 'Debra', TIMESTAMP '2014-11-30 04:26:29' FROM DUAL UNION ALL
SELECT '3456', 'Debra', TIMESTAMP '2014-11-30 05:26:29' FROM DUAL UNION ALL
SELECT '5678', 'Debra', TIMESTAMP '2014-12-01 05:26:29' FROM DUAL;