一尘不染

根据字段组合选择最新结果

sql

我正在使用MySQL,但是我认为这是一个基本的SQL问题。
除了举个例子,我不知道还有什么要问的。

假设我的表格中有以下数据:

id    date_time             foreign_key   key             value
1     2010-01-01 00:00:00   1             'temperature'   84
2     2010-01-01 00:00:01   1             'humidity'      34
3     2010-01-01 00:00:02   2             'temperature'   45
4     2010-01-01 00:00:03   2             'humidity'      23
5     2010-01-01 00:00:04   2             'dew_point'     78
6     2010-01-01 00:00:05   3             'temperature'   57
7     2010-01-01 00:00:06   3             'humidity'      41
8     2010-01-01 00:00:07   4             'temperature'   19
9     2010-01-01 00:00:08   4             'humidity'      35
10    2010-01-01 00:00:09   4             'dew_point'     24
11    2010-01-01 00:00:10   1             'temperature'   84
12    2010-01-01 00:00:11   1             'dew_point'     34
13    2010-01-01 00:00:12   2             'temperature'   45
14    2010-01-01 00:00:13   2             'humidity'      23
15    2010-01-01 00:00:14   3             'dew_point'     57
16    2010-01-01 00:00:15   3             'humidity'      41
17    2010-01-01 00:00:16   4             'temperature'   19
18    2010-01-01 00:00:17   4             'dew_point'     24

如何获得单个Foreign_key的每个密钥的最新信息?

例如,假设我想要4的Foreign_key最新,那么我想要的结果将是:

id    date_time             foreign_key   key             value
9     2010-01-01 00:00:08   4             'humidity'      35
17    2010-01-01 00:00:16   4             'temperature'   19
18    2010-01-01 00:00:17   4             'dew_point'     24

我将使用什么SQL来达到这个结果?

顺便说一句,我意识到这并不是大多数人选择存储数据的第一种方式,但是我有自己的理由。 即,这些值彼此分开报告。


阅读 187

收藏
2021-03-08

共1个答案

一尘不染

SELECT m.id, m.date_time, m.foreign_key, m.key, m.value
FROM MyTable m
LEFT OUTER JOIN MyTable mm
ON (m.foreign_key = mm.foreign_key
AND m.key = mm.key
AND m.date_time < mm.date_time)
WHERE mm.key IS NULL
AND m.foreign_key=4;

给了我我所需要的。即:

+----+---------------------+-------------+-------------+-------+
| id | date_time           | foreign_key | key         | value |
+----+---------------------+-------------+-------------+-------+
|  9 | 2010-01-01 00:00:08 |           4 | humidity    |    35 |
| 17 | 2010-01-01 00:00:16 |           4 | temperature |    19 |
| 18 | 2010-01-01 00:00:17 |           4 | dew_point   |    24 |
+----+---------------------+-------------+-------------+-------+

谢谢您的回应!

2021-03-08