我怎樣才能在不為 NULL 的情況下獲得 MAX 3 個月?
結果我需要 UserId、UserAgreementId 和 MAX Not NULL 和 Group BY UserId
| 月 | ID | 用戶身份 | 用戶協議 ID | 訂閱日期 | 數量 |
|---|---|---|---|---|---|
| 1 | 空值 | 空值 | 空值 | 空值 | 空值 |
| 2 | 12 | 222 | 33333 | 2020-02-02 00:00:00.000 | 40000 |
| 3 | 空值 | 空值 | 空值 | 空值 | 空值 |
| 4 | 13 | 222 | 33333 | 2020-04-03 00:00:00.000 | 5000 |
| 5 | 空值 | 空值 | 空值 | 空值 | 空值 |
| 6 | 15 | 222 | 33333 | 2020-06-04 00:00:00.000 | 7000 |
| 7 | 16 | 222 | 33333 | 2020-07-02 00:00:00.000 | 8000 |
| 8 | 17 | 222 | 33333 | 2020-08-09 00:00:00.000 | 4000 |
| 9 | 空值 | 空值 | 空值 | 空值 | 空值 |
| 10 | 空值 | 空值 | 空值 | 空值 | 空值 |
| 11 | 空值 | 空值 | 空值 | 空值 | 空值 |
| 12 | 空值 | 空值 | 空值 | 空值 | 空值 |
因為結果必須是這樣的
| 用戶身份 | 用戶協議 ID | 最大限度 |
|---|---|---|
| 222 | 33333 | 3 |
Table AgreementId 在行中有 SubsriptionDate,我需要計算 max 不為空的期間 Amount
| 用戶協議 ID | 訂閱日期 | 數量 |
|---|---|---|
| 33333 | 2020-02-02 00:00:00.000 | 40000 |
| 33333 | 2020-04-03 00:00:00.000 | 5000 |
| 33333 | 2020-06-04 00:00:00.000 | 7000 |
| 33333 | 2020-07-02 00:00:00.000 | 8000 |
| 33333 | 2020-08-09 00:00:00.000 | 4000 |
uj5u.com熱心網友回復:
您要查詢的內容對于查詢來說太復雜了-運行需要很長時間。
例如,我在下面整理了一個草稿,該草稿幾乎可以獲得每個用戶的最長持續時間,但它參考了同一個表 5 次。
這幾乎不可讀,令人費解,并且會比您想要的更多地對服務器征稅。
相反,獲取記錄并用更合適的編程語言處理它們。
SELECT t.user_id, MAX(t.monthsTotal - s.monthsTotal 1) AS longestDuration
FROM (SELECT a.*, YEAR(a.subscriptionDate) * 12 a.month AS monthsTotal
FROM table_name) as t
INNER JOIN (SELECT a.*, YEAR(a.subscriptionDate) * 12 a.month AS monthsTotal
FROM table_name AS a
LEFT OUTER JOIN table_name AS preceeding
ON a.user_id = preceeding.user_id
AND YEAR(a.subscriptionDate) * 12 a.month = YEAR(preceeding.subscriptionDate) * 12 preceeding.month 1
WHERE preceedingMonth.id IS NULL) AS s
ON t.user_id = s.user_id
AND t.monthsTotal >= s.monthsTotal
LEFT OUTER JOIN (SELECT a.*, YEAR(a.subscriptionDate) * 12 a.month AS monthsTotal
FROM table_name AS a
LEFT OUTER JOIN table_name AS preceeding
ON a.user_id = preceeding.user_id
AND YEAR(a.subscriptionDate) * 12 a.month = YEAR(preceeding.subscriptionDate) * 12 preceeding.month 1
WHERE preceedingMonth.id IS NULL) AS dummy
ON t.user_id = dummy.user_id
AND dummy.monthsTotal > s.monthsTotal
AND t.monthsTotal > dummy.monthsTotal
WHERE dummy.id IS NULL
GROUP BY t.user_id
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422061.html
標籤:
上一篇:如何在AmazonAthena查詢中轉義下劃線和單引號?
下一篇:計算給定表中有多少1
