gpt4 book ai didi

sql - 内联查询是个坏主意吗?

转载 作者:行者123 更新时间:2023-11-29 11:42:16 25 4
gpt4 key购买 nike

我有一个表,其中包含不同站点上生成器的运行时间,我想为每个站点选择最新的条目。每台发电机每周运行一次或两次。

我有一个查询可以执行此操作,但我想知道它是否是最佳选择。我忍不住认为使用 WHERE x IN (SELECT ...) 是懒惰的,不是制定查询的最佳方式 - 任何查询。

表格如下:

CREATE TABLE generator_logs (
id integer NOT NULL,
site_id character varying(4) NOT NULL,
start timestamp without time zone NOT NULL,
"end" timestamp without time zone NOT NULL,
duration integer NOT NULL
);

和查询:

SELECT id, site_id, start, "end", duration 
FROM generator_logs
WHERE start IN (SELECT MAX(start) AS start
FROM generator_logs
GROUP BY site_id)
ORDER BY start DESC

没有大量数据,所以我不担心优化查询。但是,我确实必须在具有数千万行的表上做类似的事情(就我而言是大表!)并且优化更为重要。

那么有更好的查询吗?内联查询通常不是一个好主意吗?

最佳答案

您的查询不应该关联吗?即:

SELECT id, site_id, start, "end", duration 
FROM generator_logs g1
WHERE start = (SELECT MAX(g2.start) AS start
FROM generator_logs g2
WHERE g2.site_id = g1.site_id)
ORDER BY start DESC

否则,您可能会选择非最新日志,其起始值恰好与不同站点的最新起始值匹配。

或者:

SELECT id, site_id, start, "end", duration 
FROM generator_logs g1
WHERE (site_id, start) IN (SELECT site_id, MAX(g2.start) AS start
FROM generator_logs g2
GROUP BY site_id)
ORDER BY start DESC

关于sql - 内联查询是个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/308456/

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