[英]How to get correct min, max date for each customer's changing label in wide format in BigQuery?
[英]How to get min value at max date in sql?
我有一個包含快照數據的表。 它具有 productid 和日期以及數量列。 我需要在最大日期中找到最小值。 比方說,我們有產品 X:X 在 Y 日期有最后一個快照,但它在 Y 有兩個快照,數量值分別為 9 和 8。 我需要得到
product_id | date | quantity
X Y 8
到目前為止,我想出了這個。
select
productid
, max(snapshot_date) max_date
, min(quantity) min_quantity
from snapshot_table
group by 1
它有效,但我不知道為什么。 為什么這不會為每個日期帶來最小值?
我會在這里使用RANK
和標量子查詢:
WITH cte AS (
SELECT *, RANK() OVER (ORDER BY quantity) rnk
FROM snapshot_table
WHERE snapshot_date = (SELECT MAX(snapshot_date) FROM snapshot_table)
)
SELECT productid, snapshot_date, quantity
FROM cte
WHERE rnk = 1;
請注意,此解決方案迎合了兩條或更多條記錄碰巧因最近的記錄中數量較少而被綁定的可能性。
編輯:我們可以通過取消 CTE 並使用QUALIFY
子句來限制RANK
來簡化:
SELECT productid, snapshot_date, quantity
FROM snapshot_table
WHERE snapshot_date = (SELECT MAX(snapshot_date) FROM snapshot_table)
QUALIFY RANK() OVER (ORDER BY quantity) = 1;
還請考慮以下方法
select distinct product_id,
max(snapshot_date) over product as max_date,
first_value(quantity) over(product order by snapshot_date desc, quantity) as min_quantity
from your_table
window product as (partition by product_id)
使用 row_number()
with cte as (select *,
row_number() over(partition by product_id order by date desc) rn
from table_name) select * from cte where rn=1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.