我有 2 張桌子
表格1
| 顧客 | Date_last_transacted |
|---|---|
| 一個 | 2021-08-06 |
| 乙 | 2007-09-02 |
表 2
| 顧客 | 事務id | 交易日期 |
|---|---|---|
| 一個 | 123 | 2021-08-06 |
| 乙 | 234 | 2007-09-02 |
| 一個 | 356 | 2014-09-09 |
| 乙 | 456 | 2003-08-03 |
| 一個 | 4567 | 2017-08-23 |
| 一個 | 2244 | 2021-08-07 |
| 一個 | 45678 | 2021-07-21 |
表 1 是使用 max(transactionDate) 從 table2 派生的
我想為該特定客戶選擇 date_last_transacted 之前 24 個月的表 2 中的所有行。
所以,我想從表 2 中得到的結果是:表 2
| 顧客 | 事務id | 交易日期 |
|---|---|---|
| 一個 | 123 | 2021-08-06 |
| 乙 | 234 | 2007-09-02 |
| 一個 | 2244 | 2021-08-07 |
| 一個 | 45678 | 2021-07-21 |
你能幫忙看一下代碼嗎?
uj5u.com熱心網友回復:
您可以嘗試以下連接查詢:
SELECT T.Customer, T.Transactionid, T.TransactionDate
FROM Table2 T
JOIN
(
SELECT Customer, MAX(TransactionDate) Date_last_transacted
FROM Table2
GROUP BY Customer
) D
ON T.TransactionDate > DATEADD(Month, -24, D.Date_last_transacted) AND
T.Customer = D.Customer
ORDER BY T.Transactionid
此外,您可以使用以下MAX視窗函式:
SELECT Customer, Transactionid, TransactionDate
FROM
(
SELECT *,
MAX(TransactionDate) OVER (PARTITION BY Customer) Date_last_transacted
FROM Table2
) T
WHERE TransactionDate > DATEADD(Month, -24, Date_last_transacted)
ORDER BY Transactionid
查看演示。
uj5u.com熱心網友回復:
有一種方法可以使用子查詢和 DATEADD 函式過濾行。
SELECT * FROM Table2 T2
WHERE
DATEADD(month, 24, T2.transactionDate) >=
( SELECT MAX(T1.transactionDate) FROM Table2 T1
WHERE T1.Customer=T2.Customer GROUP BY T1.Customer );
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/523331.html
標籤:sqlsql服务器数据库
