当前位置: 首页 > 面试题库 >

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

松飞翮
2023-03-14
问题内容

我正在使用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来达到这个结果?

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


问题答案:

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 |
+----+---------------------+-------------+-------------+-------+

谢谢您的回应!



 类似资料:
  • 我使用更新费动态基于单选按钮在WooCommerce结账答案代码解决方案,工作非常好,我添加复选框字段与不同的价格为每一个,价格变化反映在结账。 但是我需要一些帮助:当我选择一种附加税的包装时,它会出现在订单区的后端,但只显示价格,我也想显示标题。 复选框选项有: 如何使其在订单上显示名称?是否可以将复选框改为选择字段?

  • 问题内容: 在对话框中,如果选中了某个组合,则需要显示一组控件,否则显示另一组控件。即我需要2层,并且当组合被选中/未选中时,我需要在它们之间切换。我怎样才能做到这一点? 问题答案: CardLayout 为此,如下所示。

  • 你可以选择要导出的字段。在默认情况下,列表中所有字段都已选择。如果你不想导出某些字段,首先取消勾选“全部字段”选项,然后在列表中取消勾选那些字段。 【注意】导出查询结果时,向导会将会跳过这个步骤。

  • 问题内容: 我遇到了我不希望做的事情,我不知道该如何处理活动记录(实际上我无法确切地说出如何使用sql来做)。我想根据某个字段的最高值以及其他一些条件来选择记录。以下是一些伪造的东西,它们解释了我的情况。给出以下记录: 我希望能够获取已保存的修订版本号最高的记录。这意味着ID为:3、6和8的记录 我的第一个本能是做某种子查询,该子查询在修订之类的东西上获得MAX。除此之外,我真的不知道该怎么做,因

  • 根据结果,选出最优版本 为了避免流量过小而造成的结果偏差,用户可以根据自身情况,由小到大逐步增加流量分配,判断当前流量分配的数据结果是否具有普遍意义,最终选出最优版本。 若试验版本表现较好,则可以通过在线发布将此版本推送给所有用户(APP用户无需经过应用市场审核);若原始版本表现较好,则可以选择结束试验。 在发布最优版本后,继续观察用户行为数据,找出可以进一步优化的内容,不断进行A/B 测试,就可

  • 抱歉发了这么长的帖子! 我有一个Mongo收藏,包含以下文档: 我想查询这些文档,并返回每个名称的最大值条目,因此我想要的结果集(顺序无关紧要)是: 如果我想在C#中做完全相同的事情,我会使用: 使用聚合管道,我已经达到了: 这给了我以下结果集: 如您所见,我有一个文档数组,每个文档都包含一个“_id”字段(名称)和一个“highest”字段(实际文档)。 这将用C表示为: 我想知道的是,是否可以