Sql 将数据从天聚合到月

Sql 将数据从天聚合到月,sql,redash,Sql,Redash,我有按天显示的数据,我想将这些数据写入月度报告。数据如下所示 发票日期总收入净收入 2018-06-28 ,1623.99 ,659.72 2018-06-27 ,112414.65 ,38108.13 2018-06-26 ,2518.74 ,1047.14 2018-06-25 ,475805.92 ,172193.58 2018-06-22 ,1151.79 ,478.

我有按天显示的数据,我想将这些数据写入月度报告。数据如下所示

发票日期总收入净收入 2018-06-28 ,1623.99 ,659.72 2018-06-27 ,112414.65 ,38108.13 2018-06-26 ,2518.74 ,1047.14 2018-06-25 ,475805.92 ,172193.58 2018-06-22 ,1151.79 ,478.96 我如何着手创建一份报告,其中提供了6月、7月、8月等月份的总收入和净收入,并按天报告数据

到目前为止,这就是我所拥有的

SELECT invoice_date, 
SUM(gross_revenue) AS gross_revenue, 
SUM(net_revenue) AS net_revenue
FROM wc_revenue
GROUP BY invoice_date

您可以尝试
汇总
。示例说明如下:

表数据:

mysql> select * from wc_revenue;
+--------------+---------------+-------------+
| invoice_date | gross_revenue | net_revenue |
+--------------+---------------+-------------+
| 2018-06-28   |       1623.99 |      659.72 |
| 2018-06-27   |     112414.65 |    38108.13 |
| 2018-06-26   |       2518.74 |     1047.14 |
| 2018-06-25   |     475805.92 |   172193.58 |
| 2018-06-22   |       1151.79 |      478.96 |
| 2018-07-02   |        150.00 |      100.00 |
| 2018-07-05   |        350.00 |      250.00 |
| 2018-08-07   |        600.00 |      400.00 |
| 2018-08-09   |        900.00 |      600.00 |
+--------------+---------------+-------------+

mysql> SELECT month(invoice_date) as MTH, invoice_date, SUM(gross_revenue) AS gross_revenue, SUM(net_revenue) AS net_revenue 
FROM wc_revenue 
GROUP BY MTH, invoice_date WITH ROLLUP;
+------+--------------+---------------+-------------+
| MTH  | invoice_date | gross_revenue | net_revenue |
+------+--------------+---------------+-------------+
|    6 | 2018-06-22   |       1151.79 |      478.96 |
|    6 | 2018-06-25   |     475805.92 |   172193.58 |
|    6 | 2018-06-26   |       2518.74 |     1047.14 |
|    6 | 2018-06-27   |     112414.65 |    38108.13 |
|    6 | 2018-06-28   |       1623.99 |      659.72 |
|    6 | NULL         |     593515.09 |   212487.53 |
|    7 | 2018-07-02   |        150.00 |      100.00 |
|    7 | 2018-07-05   |        350.00 |      250.00 |
|    7 | NULL         |        500.00 |      350.00 |
|    8 | 2018-08-07   |        600.00 |      400.00 |
|    8 | 2018-08-09   |        900.00 |      600.00 |
|    8 | NULL         |       1500.00 |     1000.00 |
| NULL | NULL         |     595515.09 |   213837.53 |
+------+--------------+---------------+-------------+

我会简单地按年份和月份分组

SELECT invoice_date, 
       SUM(gross_revenue) AS gross_revenue, 
       SUM(net_revenue) AS net_revenue 
FROM wc_revenue GROUP BY year(invoice_date), month(invoice_date)
由于我不知道您是否有权访问
函数,另一种解决方案是将日期转换为varchar,并按最左边的7个字符分组(年+月)


了解所使用的SQL的特定风格将非常有用,因为此处所需的函数将取决于此。我对谷歌RedAsh的粗略理解是,它运行在许多数据源之上,尽管我可能弄错了。我相信它是t-sqlI,我无法访问年份和月份功能,但我仍然非常感谢您在这方面的帮助!!不客气。对于支持月函数的数据库(例如,
MySQL
),您可以保留此方法作为替代方法。我没有访问年和月函数的权限,如果使用第二个代码,则会出现此错误“运行查询时出错:列“view\u cw\u wc\u revenue.invoice\u date”必须显示在GROUP BY子句中或在聚合函数中使用”那是因为我忘了更改SELECT的字段,我现在将对其进行编辑。请再试一次,告诉我它是否有效!
SELECT left(cast(invoice_date as varchar(50)),7) AS invoice_date, 
       SUM(gross_revenue) AS gross_revenue, 
       SUM(net_revenue) AS net_revenue 
FROM wc_revenue GROUP BY left(cast(invoice_date as varchar(50)),7)