如何将 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;
我正在尝试获取 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;