【发布时间】:2021-06-09 15:17:54
【问题描述】:
我的 postgresql timescaledb 数据库(版本 12.06)中有 2 个表,我尝试通过内部联接进行查询。 表结构:
CREATE TABLE currency(
id serial PRIMARY KEY,
symbol TEXT NOT NULL,
name TEXT NOT NULL,
quote_asset TEXT
);
CREATE TABLE currency_price (
currency_id integer NOT NULL,
dt timestamp WITHOUT time ZONE NOT NULL,
open NUMERIC NOT NULL,
high NUMERIC NOT NULL,
low NUMERIC NOT NULL,
close NUMERIC,
volume NUMERIC NOT NULL,
PRIMARY KEY (
currency_id,
dt
),
CONSTRAINT fk_currency FOREIGN KEY (currency_id) REFERENCES currency(id)
);
我要查询的是:
SELECT currency_id AS id, symbol, MAX(close) AS close, DATE(dt) AS date
FROM currency_price
JOIN currency ON
currency.id = currency_price.currency_id
GROUP BY currency_id, symbol, date
LIMIT 100;
基本上,它返回currency_price 表中存在的所有行。我知道 postgres 不允许选择没有聚合函数或将它们包含在“group by”子句中的列。因此,如果我的选择查询中不包含 dt 列,我会收到预期的结果,但如果包含它,输出会显示每种货币每一天的行,而我只想获得每种货币的最大值和之后根据不同的日期将它们过滤掉。
总的来说,我对 SQL 非常缺乏经验。 任何解决此问题的建议将不胜感激。
【问题讨论】:
-
你好。你能添加一些数据样本吗?最好在小提琴中
-
我没有得到最后一位,你想得到最大值(关闭)值和最大值的日期,对吧?
-
是的,完全正确。它改为显示每一行。仍在尝试在小提琴上创建一些示例数据。
-
我可能会推荐使用第一个/最后一个函数,如下所示:youtu.be/okB3tcXsQB0 & youtu.be/w5dbC_iM4oE
-
示例数据链接:sqlfiddle.com/#!17/0455a/17@Jim /跨度>