gpt4 book ai didi

获取每个位置的 "latest"值的 SQL 查询

转载 作者:行者123 更新时间:2023-12-04 22:28:48 25 4
gpt4 key购买 nike

我认为很容易解决的问题现在已经困扰了很长一段时间。现在我需要你们的帮助。

在 Informix 中,我有一个像这样的“温度”表:

locId dtg 温度
100 2009-02-25 10:00 15
200 2009-02-25 10:00 20
300 2009-02-25 10:00 24
100 2009-02-25 09:45 13
300 2009-02-25 09:45 16
200 2009-02-25 09:45 18
400 2009-02-25 09:45 12
100 2009-02-25 09:30 11
300 2009-02-25 09:30 14
200 2009-02-25 09:30 15
400 2009-02-25 09:30 10

我正在尝试获取在过去 20 分钟内更新值的每个 locId 的最新温度。

所以我想要从上表中得到的结果是(假设我在 2009-02-25 10:10 运行查询):

locId dtg 温度
100 2009-02-25 10:00 15
200 2009-02-25 10:00 20
300 2009-02-25 10:00 24

使事情复杂化的另一件事是,我希望能够在应该选择的 locId 上提供一个列表。我的意思是使用类似“...locId IN (100,200,400)...”

我尝试在子查询上使用连接(如 SQL Query to get latest price 中所建议的),但我无法让它工作。即使没有额外的“在过去 20 分钟内更新”。

选择 t.*
从温度为 t
JOIN (select locId, max(dtg) from temperature where locId IN (100,200,400) group by locId) as l
在 l.locId=t.locId 和 l.dtg=t.dtg
其中 locId 在 (100,200,400)

这个查询给了我 SQL 错误,但我找不到错误。
是否存在我无法找到的错误,或者在 Informix 中无法通过这种方式执行此操作。

或者还有其他方法可以去吗?所有帮助表示赞赏。

最佳答案

可以使用以下语法更正您的 SQL 错误:

SELECT t.*
FROM temperatures AS t
INNER JOIN (
SELECT locId, MAX(dtg) AS maxdtg
FROM temperatures
WHERE locId IN (100,200,400) GROUP BY locId
) AS l
ON l.locId = t.locId AND maxdtg = t.dtg
WHERE t.locId IN (100,200,400)

编辑:另外,一种适当且更动态的方法来解决这个问题:
SELECT t2.* FROM (
SELECT locId, MAX(dtg) AS maxdtg
FROM temperatures
GROUP BY locId
) t1
INNER JOIN (
SELECT locId, dtg, temp
FROM temperatures
) t2
ON t2.locId = t1.locId
AND t2.dtg = t1.maxdtg
WHERE t2.dtg > CURRENT YEAR TO MINUTE - 20 UNITS MINUTE

编辑:正在寻找 future 超过 20 分钟而不是 20 分钟前的帖子......哎呀!

再次编辑:忘记这是用于 Informix 数据库...为 where 子句提供了 MSSQL 语法。

关于获取每个位置的 "latest"值的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1783932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com