SQL - 为其他 table 中的每个键获取列的 MIN
SQL - Get MIN of a column for each key in other table
我有两个 table:
订单
Date
TransactID
COL3
2021-06
1234
4
2021-09
1238
8
综合
Date
User
TransactID
2021-06
3333
1234
2021-03
3333
XXXX
2021-02
3333
XXXX
2021-09
4444
1238
2021-05
4444
XXXX
2021-01
4444
XXXX
在AGG中,一个User可以有很多笔交易,ORDERStable只是其中的一个子集。
对于订单中的每个 TransactID,我需要进入 Agg table 并获取与 TransactID 关联的用户的 MIN 日期。
然后,我需要计算 ORDERS.Date 和最小值 AGG.DATE 之间的日期差异。结果存储在 SDP.COL3 中。 COL3 基本上可以描述为自首次交易以来的天数。
我从来没有做过这么多步骤的 SQL 题,需要一些指导。任何帮助将不胜感激!
根据您的 SQL Fidddle (http://sqlfiddle.com/#!9/101497/1) 这应该可以帮助您入门
SELECT TXN_ID, DT, USERID
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY sdp.TXN_ID ORDER BY sdp.DT ASC) AS [index],
sdp.TXN_ID,
sdp.DT,
agg.USERID
FROM sdp
LEFT JOIN agg ON sdp.TXN_ID = agg.TXN_ID) A
WHERE [index] = 1
有关更多信息,您应该查看
https://www.sqlshack.com/sql-partition-by-clause-overview/
https://www.sqltutorial.org/sql-window-functions/sql-partition-by/
如果我没猜错的话
SELECT SDP.TXN_ID, sdp.dt, datediff(sdp.dt, min(a1.DT)) diff
FROM SDP
JOIN AGG a1 on a1.UserID =
(SELECT a2.UserID
FROM AGG a2
WHERE SDP.TXN_ID = a2.TXN_ID
ORDER BY a2.UserID
limit 1)
GROUP BY SDP.TXN_ID, sdp.dt
可以省略
ORDER BY a2.UserID
limit 1
前提是每笔交易始终属于一个用户。
我有两个 table:
订单
Date | TransactID | COL3 |
---|---|---|
2021-06 | 1234 | 4 |
2021-09 | 1238 | 8 |
综合
Date | User | TransactID |
---|---|---|
2021-06 | 3333 | 1234 |
2021-03 | 3333 | XXXX |
2021-02 | 3333 | XXXX |
2021-09 | 4444 | 1238 |
2021-05 | 4444 | XXXX |
2021-01 | 4444 | XXXX |
在AGG中,一个User可以有很多笔交易,ORDERStable只是其中的一个子集。
对于订单中的每个 TransactID,我需要进入 Agg table 并获取与 TransactID 关联的用户的 MIN 日期。
然后,我需要计算 ORDERS.Date 和最小值 AGG.DATE 之间的日期差异。结果存储在 SDP.COL3 中。 COL3 基本上可以描述为自首次交易以来的天数。
我从来没有做过这么多步骤的 SQL 题,需要一些指导。任何帮助将不胜感激!
根据您的 SQL Fidddle (http://sqlfiddle.com/#!9/101497/1) 这应该可以帮助您入门
SELECT TXN_ID, DT, USERID
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY sdp.TXN_ID ORDER BY sdp.DT ASC) AS [index],
sdp.TXN_ID,
sdp.DT,
agg.USERID
FROM sdp
LEFT JOIN agg ON sdp.TXN_ID = agg.TXN_ID) A
WHERE [index] = 1
有关更多信息,您应该查看
https://www.sqlshack.com/sql-partition-by-clause-overview/
https://www.sqltutorial.org/sql-window-functions/sql-partition-by/
如果我没猜错的话
SELECT SDP.TXN_ID, sdp.dt, datediff(sdp.dt, min(a1.DT)) diff
FROM SDP
JOIN AGG a1 on a1.UserID =
(SELECT a2.UserID
FROM AGG a2
WHERE SDP.TXN_ID = a2.TXN_ID
ORDER BY a2.UserID
limit 1)
GROUP BY SDP.TXN_ID, sdp.dt
可以省略
ORDER BY a2.UserID
limit 1
前提是每笔交易始终属于一个用户。