我正在使用下面的代碼為每個專案提取日期/序列中的最新記錄,每個專案一行。我發現的問題是我相信我需要將日期作為 MAX 優先,然后計算最大序列。第二個表顯示了我在專案 5356262(和其他幾個)中遇到的問題,這個 sku 沒有將任何資料引入查詢......我相信是因為最大 SEQ 與最大 SEQ 位于不同的行上日期所以它變得困惑?
任何幫助,將不勝感激。謝謝。
一般資料示例:
| 物品 | 出口 | 序列 | 米 | 升 |
|---|---|---|---|---|
| 35435353 | 6/2/2021 | 3 | 52 美元 | 15 美元 |
| 64363663 | 2021 年 5 月 24 日 | 1 | 33 美元 | 5 美元 |
| 75474747 | 2021/7/24 | 2 | 13 美元 | 3 美元 |
問題示例(嘗試僅獲取 7/24/2021 記錄)。
| 物品 | 出口 | 序列 | 米 | 升 |
|---|---|---|---|---|
| 5356262 | 6/2/2021 | 3 | 52 美元 | 15 美元 |
| 5356262 | 2021 年 5 月 24 日 | 1 | 33 美元 | 5 美元 |
| 5356262 | 2021/7/24 | 1 | 13 美元 | 3 美元 |
SELECT *
(SELECT item, cpp, exdt, seq, tvt_1 tft_1 AS ttot_1
FROM dbo.sample123) AS p
PIVOT (SUM(ttot_1) FOR cpp IN ([M], [L], [OH]])) AS pvtc
WHERE (exdt =
(SELECT MAX(exdt) AS exdtmax
FROM dbo.sample123 t2
WHERE (LTRIM(t2.item)=LTRIM(pvtc.item))))
AND (seqn =
(SELECT MAX(seq) AS seqmax
FROM dbo.sample123 AS t2
WHERE LTRIM(t2.item)=LTRIM(pvtc.item)))
uj5u.com熱心網友回復:
最簡單的方法可能是使用帶有 ORDER BY 子句的ROW_NUMBER 之類的東西來控制確定第一行的方式。像這樣的東西:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER(PARTITION BY item ORDER BY exdt DESC, seq ASC) as rownum
FROM (
SELECT item, cpp, exdt, seq, tvt_1 tft_1 AS ttot_1
FROM dbo.sample123
) AS p
PIVOT (SUM(ttot_1) FOR cpp IN ([M], [L], [OH])) AS pvtc
) a
WHERE rownum = 1
uj5u.com熱心網友回復:
您是否想簡單地獲取每組行的最大日期的元組?然后做點別的?
然后將問題分解為更小的問題并單獨解決每個問題:
這應該這樣做:
假設你想得到每組屬性a(可以是多個屬性)的b的最大值:
select *
from table
where (a, b) in (select a, max(b) from table group by a));
如果您需要選擇具有最大屬性 c 的元組,那么您可以將上面的查詢包裝到子查詢中:
with t as (select *
from table
where (a, b) in (select a, max(b) from table group by a)))
select * from t where c in (select max(c) from t)
;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/351624.html
標籤:sql sql-server 查询语句 最大限度
