簡體   English   中英

MySQL 在使用 LAG() 函數時忽略 NULL 值

[英]MySQL ignore NULL Value while using LAG() function

我想計算全年發生的每月付款差異。 例如,如果我在 2 月有 100 筆付款,在 3 月有 120 筆付款,則差值為 20。我已經使用 LAG() 進行了查詢,但我面臨的唯一問題是查詢顯示空值。 由於 2 月之前沒有付款,因此 MonthByMonth 將顯示 NULL,我想跳過那一行。 下面是示例數據集

樣本數據集

這是我正在使用的查詢

SELECT date_format(payment_date,'%M') 'Month', COUNT(*) - LAG(COUNT(*)) 
OVER (ORDER BY FIELD(date_format(payment_date,'%M'),
'January','February','March','April','May','June','July','August','September','October','November','December')) 
AS 'MonthByMonthChange'
from main
GROUP BY date_format(payment_date,'%M')
ORDER BY FIELD(date_format(payment_date,'%M'),'January','February','March','April','May','June','July','August','September','October','November','December');

還附上我得到的輸出。

樣本輸出

子查詢,然后在逐月更改字段上添加檢查以過濾掉NULL記錄。

WITH cte AS (
    SELECT DATE_FORMAT(payment_date, '%M') Month,
           COUNT(*) - LAG(COUNT(*)) OVER (
               ORDER BY FIELD(DATE_FORMAT(payment_date, '%M'),
               'January', 'February', 'March', 'April', 'May', 'June', 'July',
               'August', 'September', 'October', 'November', 'December'))
           AS MonthByMonthChange
    FROM main
    GROUP BY 1
)

SELECT Month, MonthByMonthChange
FROM cte
WHERE MonthByMonthChange IS NOT NULL
ORDER BY FIELD(Month, 'January', 'February', 'March', 'April', 'May', 'June',
                      'July', 'August', 'September', 'October', 'November',
                      'December');

暫無
暫無

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

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