Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql中选择一些行作为列_Mysql - Fatal编程技术网

如何在mysql中选择一些行作为列

如何在mysql中选择一些行作为列,mysql,Mysql,大家好?我正在使用一个MySQL表,该表存储员工的工资、日期和电表读数。我想选择上个月的读数作为上个月的读数,选择本月的读数作为本月的读数,这就是我的意思 payno | date | value -------+------------+------------ 6 | 2019-08-31 | 2477 6 | 2019-09-25 | 2487 8 | 2019-08-31 | 1651.2 8 | 2019-09-25 | 1697

大家好?我正在使用一个MySQL表,该表存储员工的工资、日期和电表读数。我想选择上个月的读数作为上个月的读数,选择本月的读数作为本月的读数,这就是我的意思

 payno | date       | value 
-------+------------+------------
 6     | 2019-08-31 | 2477
 6     | 2019-09-25 | 2487
 8     | 2019-08-31 | 1651.2
 8     | 2019-09-25 | 1697.6
以上是我的表格结构,我想实现以下目标:

 payno | previous month| current month
-------+---------------+------------
 6     | 2477          | 2487
 8     | 1651.2        | 1697.6

请注意,上个月的读数是月份(日期)为8的读数,而本月的读数是月份(日期)为9的读数。

我不知道每个月可以读取多少读数,因此我们将对它们进行总结

select e.payno,
(   select sum(x1.val) 
    from emp x1 
    where x1.payno=e.payno and month(x1.data)=month(date_sub(e.data, INTERVAL 1 MONTH))
    group by x1.payno ) AS prev_month,
(   select sum(x2.val) 
    from emp x2 
    where x2.payno=e.payno and month(x2.data)=month(e.data)
    group by x2.payno ) AS this_month
from emp e
where month(e.data)=9 /* this is where you specify "current" month */
;

MySQL版本是什么?我使用MySQL 5.6,在这种情况下MySQL版本真的很重要吗?如果你在后一版本,即8 +“我使用MySQL 5.6,MySQL版本真的很重要吗?”,你可以考虑加窗函数。“是的,MySQL版本真的很重要,或者你可以使用引线/延迟(MySQL 8 +)。或者你用MySQL的用户变量(MySQL 5.1+)来模拟,或者使用相关子查询,或者滥用MySQL的GROUP_CONCAT。。。。。另外,还不清楚一个
payno
组是否可以有两条以上的记录..我得看看你的答案。我已经实施了它。当上个月和当前月记录都可用时,它可以正常工作。当没有当前月份的读数时,我不会得到任何结果。是否可以修改您的查询,以便在当前月份没有记录的情况下,它会给我上个月的读数,而当前月份的读数为null或0?@BensonKiprono您刚刚问了另一个问题。如果你认为我的代码回答了你原来的问题,那么接受答案,接受我的代码,然后问一个新的问题,然后有人会尝试回答你。