如何将 CTE 与我的其余查询一起加入?

How do I JOIN a CTE with the rest of my query?

我正在尝试获取 mytable2 中的第一次出现日期并将其与 mytable1 合并。

例如:

SELECT userid, occurrence_date
FROM (
     SELECT
        userid, occurrence_date,
        row_number () over (partition by userid order by occurrence_date) rn
FROM mytable2
) cte where rn = 1;

如何将其与此查询相结合:

SELECT userid, fieldname, event_date, count(transactions)
FROM mytable1
WHERE YEAR(event_date) >= '2020'
GROUP BY userid, fieldname, event_date;

这是我第一次使用 CTE,所以我不太了解如何将它们组合在一起。

来自我的table1 在 mytable1.userid = mytable2.userid

上左加入我的table2

这是一些示例数据:

我的table1

-------------------------------------------------
|userid|fieldname|event_date|count(transactions)|
-------------------------------------------------
|  1   |limes    |05/10/2020|           4       |
-------------------------------------------------
|  1   |potatoes |05/10/2020|           3       |
-------------------------------------------------
|  2   |pears    |02/15/2020|           8       |
-------------------------------------------------
|  2   |pineapple|03/02/2020|           6       |
-------------------------------------------------
|  2   |oranges  |03/05/2020|          10       |
-------------------------------------------------

我的table2

------------------------------------
|userid|     occurrence_date       |
------------------------------------
|  1   |04/20/2019 01:12:00.000    |
|  1   |04/20/2019 01:12:15.010    |
|  1   |05/10/2020 05:15:33.020    |
|  1   |05/10/2020 05:16:23.011    |
|  2   |03/25/2018 07:33:16.013    |
|  2   |02/15/2020 09:15:30.223    |
|  2   |03/02/2020 11:24:16.210    |
|  2   |03/05/2020 10:30:16.123    |
------------------------------------

mytable3(结果 table)...从 mytable2 中获取 occurrence_date 并在 my[=37 中调用它 acquisition_date =]3因为是最早的交易日。

-------------------------------------------------------------------------
|userid|fieldname|event_date|count(transactions)|acquisition_date       |
-------------------------------------------------------------------------
|  1   |limes    |05/10/2020|         4         |04/20/2019 01:12:00.000|
-------------------------------------------------------------------------
|  1   |potatoes |05/10/2020|         3         |04/20/2019 01:12:00.000|
-------------------------------------------------------------------------
|  2   |pears    |02/15/2020|         8         |03/25/2018 07:33:16.013|
-------------------------------------------------------------------------
|  2   |pineapple|03/02/2020|         6         |03/25/2018 07:33:16.013|
-------------------------------------------------------------------------
|  2   |oranges  |03/05/2020|        10         |03/25/2018 07:33:16.013|
-------------------------------------------------------------------------

我想通了:

with cte AS
(
   SELECT *,
           ROW_NUMBER() OVER (PARTITION BY userid ORDER BY occurrence_date) AS rn
   FROM mytable2
)
SELECT cte.occurrence_date, mytable1.userid, mytable1.fieldname, mytable1.event_date, COUNT(transactions)
FROM mytable1
LEFT JOIN cte ON mytable1.userid = cte.userid and cte.rn = 1
WHERE YEAR(mytable1.event_date) >= '2020'
GROUP BY cte.occurrence_date, mytable1.userid, mytable1.fieldname, mytable1.event_date;