簡體   English   中英

SQL 中 CASE WHEN 中的數組搜索

[英]Array Search in a CASE WHEN in SQL

我目前有兩張表的數據。 我根據某些調查結果按多個標准加入這兩個表格。

CASE WHEN a.trans_dt = b.trans_dt and b.trans_type = 'MASSTS' THEN b.trans_details

我的問題是有時可能有 2 個甚至三個 trans_Type,我嘗試使用 MAX

    MAX(CASE WHEN a.trans_dt = b.trans_dt and b.trans_type = 'MASSTS' 
    THEN b.trans_details ELSE NULL END) AS trans_Dtls

但這並不總是奏效。

表 b 中有一個字段,它是一個序列號,我想要具有更大序列號的反式類型,因為這是當天發生的最后一個。

CASE WHEN a.trans_dt = b.trans_dt and b.trans_type = 'MASSTS' 
THEN b.trans_Details(with greatest b.seq_num) 

我不知道如何告訴它抓住最大的一個。 我不一定說最后,因為數據被攝取的方式最大的 seq_num 可能是第一行或最后一行或兩者之間的任何地方,因為它們在攝取到數據庫中時沒有任何順序。

您可以使用window函數。

select a.blah.., b.blah...
from a
left join 
(select b.* , row_number() over ( partition by  trans_type, trans_dt order by trans_type, trans_dt, seq_num desc) as rn from b ) as b
ON b.rn=1 and a.trans_dt = b.trans_dt and b.trans_type = 'MASSTS' --This rn will give you data for maximum row from table b. Pls note to join on correct columns between a and b

說明 - 基於以下兩個參數,每個窗口行將被賦予 rownumber,如 1,2,3...
partition by trans_type, trans_dt - 這將決定您的數據窗口。
order by trans_type, trans_dt, seq_num desc - 這將對窗口內的數據進行排序。 因此,具有最大 seq 的 seq num 將被編號為 1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM