我有 TIMESTAMPs 和 PRICE 跨越 3 年的價格表。我想將這些以每天的最高價格分組,但也要顯示最高價格發生的那一天的哪個時間。
這是我的 SQL:
SELECT Date(TIMESTAMP), MAX(PRICE)
FROM history
WHERE Currency = 'USD'
GROUP BY Date(TIMESTAMP)
ORDER BY MAX(PRICE) DESC
結果:

如何按日期 (YYYY-MM-DD) 進行分組,同時顯示最高價格發生當天的時間?(時間包含在TIMESTAMP中)
uj5u.com熱心網友回復:
使用視窗函式的最干凈的方法,你不需要 cte 或連接表兩次:
select * from history
where Currency = 'USD'
qualify row_number() over (partition by date(TIMESTAMP) order by price desc) = 1
order by price desc
uj5u.com熱心網友回復:
您可以在此挑戰中使用CTE:
WITH max_price AS (
SELECT DATE(timestamp) max_price_date, MAX(price) max_price
FROM history
WHERE Currency = 'USD'
GROUP BY Date(timestamp)
)
SELECT *
FROM max_price
JOIN history ON history.price = max_price.max_price AND DATE(history.timestamp) = max_price_date
ORDER BY max_price DESC
MySQL 8 小提琴
uj5u.com熱心網友回復:
如果您的資料庫服務器支持它,您可以使用 FIRST_VALUE 函式首先按日期(和貨幣)分組,然后按降價對組內的行進行排序:
SELECT cast([TIMESTAMP] as date), MAX_PRICE_INDAY_REACHED_TIMESTAMP, MAX(PRICE)
FROM (
select
[TIMESTAMP], PRICE, CURRENCY,
MAX_PRICE_INDAY_REACHED_TIMESTAMP=FIRST_VALUE([TIMESTAMP]) OVER (PARTITION BY cast([TIMESTAMP] as date), Currency ORDER BY PRICE DESC)
from history
) as h
WHERE Currency = 'USD'
GROUP BY cast([TIMESTAMP] as date), MAX_PRICE_INDAY_REACHED_TIMESTAMP
ORDER BY MAX(PRICE) DESC
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/403168.html
標籤:
