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/

https://learnsql.com/blog/partition-by-with-over-sql/

如果我没猜错的话

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

前提是每笔交易始终属于一个用户。

The fiddle