繁体   English   中英

在同一表基础上左联接

[英]Left Join on the same table basics

我正在尝试创建下表:

JpId | JpName | JpValue | JpEndvalue JpId | JpName | JpValue | JpEndvalue其中,JpEndValue是来自同一表的JpValue(时间戳+ 1天),但我得到以下结果:

表:

JpId JpName JpTimeStamp JpValue

1   MAGIC   2017-06-15  151
2   BASIC   2017-06-15  152
3   MINI    2017-06-15  153
4   SUPER   2017-06-15  154
5   MAGIC   2017-06-16  161
6   BASIC   2017-06-16  162
7   MINI    2017-06-16  163
8   SUPER   2017-06-16  164

询问

SELECT jp1.JpId
    ,jp1.JpName
    ,jp1.JpValue
    ,jp2.JpValue AS 'JpEndValue'
FROM jackpot_web_report jp1
LEFT JOIN jackpot_web_report jp2
    ON jp2.JpTimeStamp = '2017-06-16'
WHERE jp1.JpTimeStamp = '2017-06-15';

结果:

1   MAGIC   151 161
1   MAGIC   151 162
1   MAGIC   151 163
1   MAGIC   151 164
2   BASIC   152 161
2   BASIC   152 162
2   BASIC   152 163
2   BASIC   152 164
3   MINI    153 161
3   MINI    153 162
3   MINI    153 163
3   MINI    153 164
4   SUPER   154 161
4   SUPER   154 162
4   SUPER   154 163
4   SUPER   154 164

预期结果:

1   MAGIC   151 161
2   BASIC   152 162
3   MINI    153 163
4   SUPER   154 164

我似乎您错过了jp2.JpName = jp1.JpName条件:

SELECT jp1.JpId
    ,jp1.JpName
    ,jp1.JpValue
    ,jp2.JpValue AS 'JpEndValue'
FROM jackpot_web_report jp1
LEFT JOIN jackpot_web_report jp2
    ON jp2.JpTimeStamp = '2017-06-16' AND jp2.JpName = jp1.JpName
WHERE jp1.JpTimeStamp = '2017-06-15';

您还可以在DATEADD条件中添加DATEADD

SELECT jp1.JpId
    ,jp1.JpName
    ,jp1.JpValue
    ,jp2.JpValue AS 'JpEndValue'
FROM jackpot_web_report jp1
LEFT JOIN jackpot_web_report jp2
    ON jp2.JpTimeStamp = DATEADD(DAY, 1, jp1.JpTimeStamp) AND jp2.JpName = jp1.JpName
WHERE jp1.JpTimeStamp = '2017-06-15';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM