0
希望我不會使這個變得複雜。 我寫了以下SQL,它返回用戶他們最近的交易符合條件 (TRANS_TYPE NOT IN(4,6,21,23)或DEPOSIT_OPTION > 64)。如果滿足條件,SQL將返回特定類型的最新記錄
SELECT
TERMINAL_ID,REGISTER_ID,[USER_ID],sub.CREATE_DATE,sub.TRANS_TYPE_ID,BUS_DATE_ID
FROM (
SELECT
T.TERMINAL_ID
,US.REGISTER_ID
,U.[USER_ID]
,T.CREATE_DATE
,T.TRANS_TYPE_ID
,T.BUS_DATE_ID
,T.TRANS_CONFIG_ID
,TT.TRANS_TYPE
, row_number()
over (partition by U.[USER_ID]
order by T.CREATE_DATE desc) rn
From [RCMDYNAMIC].[dbo].[Transaction] T
INNER JOIN [RCMDYNAMIC].[dbo].[UserSession] US ON T.USER_SESSION_ID = US.USER_SESSION_ID
INNER JOIN [RCMSTATIC].[dbo].[User] U ON U.[USER_ID] = US.[USER_ID]
INNER JOIN [RCMSTATIC].[dbo].[TransactionType] TT ON T.TRANS_TYPE_ID = TT.TRANS_TYPE_ID
INNER JOIN [RCMSTATIC].[dbo].[Register] R ON US.REGISTER_ID = R.REGISTER_ID
) sub
LEFT JOIN
[RCMSTATIC].[dbo].[DepositConfig] DC
ON sub.TRANS_CONFIG_ID = DC.DEPOSIT_ID
WHERE sub.rn = 1 AND (TRANS_TYPE NOT IN (4, 6, 21, 23) OR DEPOSIT_OPTION & 64 <> 64)
我用
row_number() over (partition by U.[USER_ID] order by T.CREATE_DATE desc) rn
不過,我真正想要的是選擇最近TRANS_TYPE的交易= 10所獲得的「最近交易」如果最近的交易遇到了以前的條件。
前面的代碼中的子查詢將返回所有用戶的所有事務,並按DESC順序對它們進行排名,外部SELECT將通過檢查其級別1事務來顯示符合條件的用戶。
我想是有這樣的事情
FOREACH用戶 如果用戶等級1交易符合條件 THEN 找到用戶最近的TRANS_TYPE 10
交易也可能是交易排名什麼1或等級n
實施例:
User_ID TRANS_TYPE DEPOSIT_OPTION Rank
1 4 7 1
1 10 7 2
2 22 64 1
2 23 4 2
2 10 126 3
2 4 7 4
3 10 3 1
4 6 64 1 -- doesn't meet the condition
4 10 7 2
形成以前的結果,如果等級1行都滿足
WHERE sub.rn = 1 AND (TRANS_TYPE NOT IN (4, 6, 21, 23) OR DEPOSIT_OPTION & 64 <> 64)
我想要顯示的,所以我會希望得到的結果是TRANS_TYPE = 10的條件:
User_ID TRANS_TYPE Rank
1 10 2
2 10 3
3 10 1
我很抱歉,如果問題不是很清楚我盡力了!
增加,因爲這個SQL服務器標籤是SQL服務器語法 –
如何做我們一個忙,並提供了一些數據,並給我們一些具體的「我很期待」值? –
幾乎聽起來像一個'申請'是需要的,而不是一個加入。 – xQbert