簡體   English   中英

如何在mysql的列中查找丟失的月份?

[英]How to find the missing month in a column in mysql?

這是我的view_remit。 我需要確定month_paid列中缺少的month_paid

在此處輸入圖片說明

我使用此代碼獲取此表,但我不知道如何確定丟失的月份。

SELECT RemitNo, PEN, Employer, month_paid, Total_PBR_Amt
FROM view_remit
JOIN (    
        SELECT 'JAN' as month_paid,'2016-01-01' as start,'2016-01-31' as end UNION ALL
        SELECT 'FEB' as month_paid,'2016-02-01' as start,'2016-02-29' as end UNION ALL
        SELECT 'MAR' as month_paid,'2016-03-01' as start,'2016-03-31' as end UNION ALL
        SELECT 'APR' as month_paid,'2016-04-01' as start,'2016-04-30' as end UNION ALL
        SELECT 'MAY' as month_paid,'2016-05-01' as start,'2016-05-31' as end UNION ALL
    SELECT 'JUN' as month_paid,'2016-06-01' as start,'2016-06-30' as end UNION ALL
    SELECT 'JUL' as month_paid,'2016-07-01' as start,'2016-07-31' as end UNION ALL
    SELECT 'AUG' as month_paid,'2016-08-01' as start,'2016-08-31' as end UNION ALL
        SELECT 'SEP' as month_paid,'2016-09-01' as start,'2016-09-30' as end UNION ALL
        SELECT 'OCT' as month_paid,'2016-10-01' as start,'2016-10-31' as end UNION ALL
        SELECT 'NOV' as month_paid,'2016-11-01' as start,'2016-11-30' as end UNION ALL
        SELECT 'DEC' as month_paid,'2016-12-01' as start,'2016-12-31' as end 
    ) M
    ON view_remit.AP_From <= M.end 
   AND view_remit.AP_To >= M.start
ORDER BY PEN, AP_From

我需要獲得此輸出。

|PEN|Employer|month|
| 1 |   a    | MAR |
| 1 |   a    | JUN |
| 1 |   a    | JUL |
| 1 |   a    | SEP |
| 1 |   a    | OCT |
| 1 |   a    | NOV |

任何幫助是極大的贊賞。 先感謝您。

由於我的聲譽水平,我仍然無法發表評論。 您提供我的問題的答案后,我將立即更正此答案:

  • 您能否放置表格的更完整示例:缺少AP_From和AP_To列。

  • 我不明白您如何將“筆”和“雇主”列與丟失的月份聯系起來。 無論如何,要根據您表上的可用月份來獲取缺失的月份,我將按照以下步驟進行操作:



    -- Just for sample query purpose
    IF OBJECT_ID('tempdb..#view_remit') is not null

    DROP TABLE #view_remit
    CREATE TABLE #view_remit (
        RemitNo             INT,
        PEN                 INT,
        Employer            VARCHAR(10),
        wmonth              VARCHAR(3),
        Total_PBR_Amt       FLOAT,
        AP_Date             DATE
    )

    INSERT INTO #view_remit VALUES
    (1,1,'a','JAN',200, '2016-01-20'),
    (1,1,'a','FEV',200, '2016-02-12'),
    (1,1,'a','APR',200, '2016-04-25'),
    (1,1,'a','AUG',200, '2016-08-02'),
    (1,1,'a','DEC',200, '2016-12-24')

    -- Your working month table
    IF OBJECT_ID('tempdb..#table_month') is not null
        DROP TABLE #table_month
    CREATE TABLE #table_month (
        wmonth              VARCHAR(3),
        DateBegin           DATE,
        EndBegin            DATE
    )
    INSERT INTO #table_month VALUES 
    ('JAN', '2016-01-01', '2016-01-31'),
    ('FEV', '2016-02-01', '2016-02-29'),
    ('MAR', '2016-03-01', '2016-03-31'),
    ('APR', '2016-04-01', '2016-04-30'),
    ('MAI', '2016-05-01', '2016-05-31'),
    ('JUN', '2016-06-01', '2016-06-30'),
    ('JUL', '2016-07-01', '2016-07-31'),
    ('AUG', '2016-08-01', '2016-08-31'),
    ('SET', '2016-09-01', '2016-09-30'),
    ('OCT', '2016-10-01', '2016-10-31'),
    ('NOV', '2016-11-01', '2016-11-30'),
    ('DEC', '2016-12-01', '2016-12-31')


    SELECT PEN, Employer, tm.wmonth
    FROM #table_month tm
    LEFT JOIN #view_remit vr
    ON vr.wmonth = tm.wmonth
    WHERE vr.wmonth is null

通常,您將為此使用EXCEPT集合運算符 設置一個名為“ months的表months其中包含所有月份,然后選擇 view_remit月份以外的所有月份。

select month from months
except
select distinct month from view_remit

但是MySQL不支持EXCEPT 而是使用左外部聯接獲取不在view_remit中的月份。

select distinct months.month
from months
left join view_remit vr on months.month = vr.month
where vr.month is null;

暫無
暫無

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

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