【发布时间】:2019-09-18 03:29:28
【问题描述】:
我有一个如下表 t1:
-----------------------------
| date | id | value |
-----------------------------
| 2/28/2019 | 1 | 55 |
| 2/28/2019 | 2 | 44 |
| 2/28/2019 | 3 | 33 |
| 2/26/2019 | 1 | 22 |
| 2/26/2019 | 2 | 12 |
| 2/26/2019 | 3 | 11 |
-----------------------------
我想从 t1 中取出 abc3,然后在同一个表 t1 中找到日期 - 1 天的 abc3 值并显示两条记录。
我创建了一个查询:
select
a.date, a.id, (a.value - b.value) as 'difference-from-previous-day'
FROM
t1 a
INNER JOIN
t1 b
ON
a.ID = b.ID
WHERE
b.DATE in (dateadd(day, -1, a.DATE));
当日期都在那里时,它工作得很好。
但是日期之间存在差距(例如,当我们查看星期一的数据并且星期一之前有一个“周末”时 - 表 t1 中没有最后一天 -1 的数据,所以这个查询显示星期一为 NULL )...
如何编写查询以获取当前日期之前的最后日期(而不是 -1 日期),其中存在数据?
预期结果:
2/28/2019 | 1 | 33 (which is "55 - 22")
2/28/2019 | 2 | 32 (which is "44 - 12")
2/28/2019 | 3 | 22 (which is "33 - 11")
谢谢。
【问题讨论】:
-
您是否要查找今天之前的最新 ID 的最新日期?另外,您使用的是 SQL Server 还是 MySQL 或其他数据库?
-
尝试查找任何 ID 的最新日期及其对应日期。所以例如星期一的 ID=5,查找星期一之前的最近一天(可能是星期五)和最近一天的 ID(星期五的 ID)。对于所有记录,这将是相同的逻辑。
-
您使用的是哪种 DBMS 产品及其版本?在某些情况下,答案可能是特定于产品的。我敢打赌它是 MySQL,但不能确定是哪个版本。
-
您的表中有一个 ID 列。是一周中的哪一天(周一、周二...)?
-
MySql和ID列不对应一天..