【问题标题】:Adding new year i new column in MySQL query在 MySQL 查询中添加新年 i 新列
【发布时间】:2017-04-13 19:03:40
【问题描述】:

我是 MySQL 新手,我有一个包含列的表

+---------------------+-------------+
|        Date         | Temperature |
+---------------------+-------------+
| 2016-01-01 00:00:00 | 10,1        |
| 2016-01-02 00:00:00 | 10,2        |
| ...                 | ...         |
| 2017-01-01 00:00:00 | 12,1        |
| 2017-01-02 00:00:00 | 12,5        |
+---------------------+-------------+

我想收到结果

+--------+------+------+
|  Date  | 2016 | 2017 |
+--------+------+------+
| 01 Jan | 10,1 | 12,1 |
| 02 Jan | 10,2 | 12,5 |
| ...    | ...  | ...  |
+--------+------+------+

我想使用子查询,但子查询可以有 1 行。有人可以帮我写出正确的查询吗?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    使用 CASE 语句

    SELECT DATE_FORMAT(samay, '%e %b') AS date_month,  
    MAX(CASE WHEN EXTRACT(YEAR FROM samay) = 2016  THEN temp END) AS '2016', 
    MAX(CASE WHEN EXTRACT(YEAR FROM samay) = 2017 THEN temp END) AS '2017' 
    FROM date_test GROUP BY date_month;
    

    【讨论】:

    • 您需要使用MAX() 函数来聚合这些CASE 表达式。否则,这可能是最好的方法。
    • @BaconBits 我认为每天都是单行
    • 这不是我想要的。在此查询的结果中,我收到三列:日期、2016 年、2017 年。在“日期”列中显示所有日期(从 2016 年到 2017 年)。在日期为 2016 年的行中,第一列具有正确的值(从 2016 年开始),第二列具有空值。在日期为 2017 年的行中,第一列具有空值,第二列具有 2017 年的值。
    • @Robson 我更新了上面的代码,所以使用它,它会给出你想要的正确结果。
    • 现在它工作得很好。这种方法对我来说更简单,更容易理解。谢谢!新的一年(例如 2018 年)来临时,可以自动添加新列吗?我的意思是在 MySQL 查询中动态添加列。
    【解决方案2】:

    你可以试试这样的:

    select d.fdate, t1.t, t2.t
    from
    (select distinct month(d) as month, day(d) as day, DATE_FORMAT(d, '%e %b') as fdate from h) as d
    left outer join
    (select DATE_FORMAT(d, '%e %b') as fdate, t from h where year(`d`) = 2016) as t1 on (d.fdate = t1.fdate)
    left outer join
    (select DATE_FORMAT(d, '%e %b') as fdate, t from h where year(`d`) = 2017) as t2 on (d.fdate = t2.fdate)
    order by d.month, d.day
    

    当然要更改列/表名

    演示http://www.sqlfiddle.com/#!9/920ea2/2

    【讨论】:

    • 谢谢!这对我来说很好,但结果是按日期和月份按字母顺序排序,例如 4 月 1 日、8 月 1 日、12 月 1 日......以及接下来的 4 月 10 日、8 月 10 日、12 月 10 日。
    • @Robson 我已经更新了答案以显示如何对结果进行排序
    • 谢谢!你太棒了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    相关资源
    最近更新 更多