简体   繁体   English

将日期列表除以月份SQL

[英]Divide list of dates by month SQL

I've got a list of ID's and dates of when they occurred. 我有一个ID列表和它们发生的日期。

id|date
1 |2019-01-22
2 |2019-02-13
etc

I want to have a table that just lists ID's by month. 我想要一个只按月份列出ID的表。 I have 我有

SELECT 
        `a`.`sourceID` AS `Jan 2019`
    FROM
        `all_dates` `a`
    WHERE
        ((MONTH(`a`.`next1`) = 1)
            AND (YEAR(`a`.`next1`) = 2019))

As one column, I want 12 columns for each month in 2019. I don't want a union (as far as I can tell). 作为一栏,我希望在2019年每个月有12栏。我不希望有工会(据我所知)。 I'm not sure if I'm just putting in the wrong syntax for a subquery or if I need to use a join or what. 我不确定是否只是为子查询输入了错误的语法,或者是否需要使用联接。

(SELECT 
        `a`.`sourceID`
    FROM
        `all_dates` `a`
    WHERE
        ((MONTH(`a`.`next1`) = 1)
            AND (YEAR(`a`.`next1`) = 2019))) AS `Jan 2019`,
(SELECT 
        `a`.`sourceID`
    FROM
        `all_dates` `a`
    WHERE
        ((MONTH(`a`.`next1`) = 2)
            AND (YEAR(`a`.`next1`) = 2019))) AS `Feb 2019`

I get an error of "subquery returns more than 1 row" with the above. 我收到上面的“子查询返回多于1行”的错误。 Am I on the right lines and just need to clean it up, or should I be doing something else? 我是在正确的路线上并且只需要清理它,还是应该做其他事情?

The result I want should look like 我想要的结果应该看起来像

|jan-2019|feb-2019
| 1      |2
| 4      |3

etc. 等等

Following query is an indirect one, also the ouput has null values which does not satisfy the condition , give it a try 以下查询是一个间接查询,输出也有不满足条件的空值,请尝试一下

 SELECT 
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '01') THEN `tablename`.`id`
        ELSE NULL
    END) AS `jan_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '02') THEN `tablename`.`id`
        ELSE NULL
    END) AS `feb_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '03') THEN `tablename`.`id`
        ELSE NULL
    END) AS `mar_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '04') THEN `tablename`.`id`
        ELSE NULL
    END) AS `apr_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '05') THEN `tablename`.`id`
        ELSE NULL
    END) AS `may_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '06') THEN `tablename`.`id`
        ELSE NULL
    END) AS `jun_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '07') THEN `tablename`.`id`
        ELSE NULL
    END) AS `jul_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '08') THEN `tablename`.`id`
        ELSE NULL
    END) AS `aug_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '09') THEN `tablename`.`id`
        ELSE NULL
    END) AS `sep_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '10') THEN `tablename`.`id`
        ELSE NULL
    END) AS `oct_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '11') THEN `tablename`.`id`
        ELSE NULL
    END) AS `nov_2019`,
    (CASE
        WHEN (SUBSTR(`tablename`.`dd`, 6, 2) = '12') THEN `tablename`.`id`
        ELSE NULL
    END) AS `dec_2019`
FROM
    `tablename`;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM