【发布时间】:2021-09-04 08:11:58
【问题描述】:
我希望在不同的条件下加入一个表两次。即使上面的行没有意义,也请阅读下面的示例。我尝试使用 CASE WHEN 左加入同一个表,但没有得到所需的输出,而且我是 SQL 新手。
有一个名为MeterReading 的表,其中包含特定月份的抄表值。我想创建一个连接表,其中包含当月的抄表,以及上个月的抄表值。
月份和年份是整数值。示例中的所有内容都是整数值。
读表
| MeterID | YearVal | MonthVal | ReadingVal | UsingVal |
|---|---|---|---|---|
| 1 | 2020 | 1 | 100 | 150 |
| 2 | 2020 | 2 | 120 | 140 |
| 3 | 2020 | 3 | 180 | 200 |
| ... | ||||
| 12 | 2020 | 12 | 140 | 200 |
| 13 | 2021 | 1 | 230 | 170 |
| 14 | 2021 | 2 | 120 | 100 |
我正在寻找的输出是这样的:
| MeterID | YearVal | MonthVal | ReadingVal | UsingVal | PrevVal | PrevUsingVal |
|---|---|---|---|---|---|---|
| 1 | 2020 | 1 | 100 | 150 | NULL | NULL |
| 2 | 2020 | 2 | 120 | 140 | 100 | 150 |
| 3 | 2020 | 3 | 180 | 200 | 120 | 140 |
| ... | ||||||
| 12 | 2020 | 12 | 140 | 200 | ... | ... |
| 13 | 2021 | 1 | 230 | 170 | 140 | 200 |
| 14 | 2021 | 2 | 120 | 100 | 230 | 170 |
还要注意,由于年月是整数,所以 2021 01 的前一个是 2020 12。
我尝试的查询是(再次,我对 SQL 很陌生):
SELECT
MR.meterid ,
MR.year_val,
MR.month_val,
MR.reading_val,
MR.using_val,
TMR.Meterid,
TMR.YV2,
TMR.MV2,
TMR.RV1,
TMR.UV2,
0 AS DelFlag
From MeterReading MR
LEFT JOIN
(
SELECT
MR.meterid,
MR.Reading_val AS RV1 ,
MR.using_val AS UV2,
CASE WHEN MR.Month_val = 1 THEN 12 ELSE MR.Month_val - 1 END AS MV2,
CASE WHEN MR.month_val = 1 THEN MR.year_val + 1 ELSE MR.year_val END AS YV2
FROM MeterReading MR
) TMR
ON
MR.meterid = TMR.meterid AND
MR.year_val = TMR.YV2 AND
MR.month_val = TMR.MV2
我没有得到预期的结果。请用简单的解释指导我。
【问题讨论】:
-
查看
lag窗口函数。 -
谢谢斯图。这很有帮助..但是如果有不规则的条目怎么办...有没有办法..谢谢
标签: mysql sql database join rdbms