【问题标题】:Aggregate data from days into a month将数据从几天聚合到一个月
【发布时间】:2018-06-29 18:28:44
【问题描述】:

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

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

如何创建一个报告,其中提供了 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

【问题讨论】:

  • 了解所使用的 SQL 的特定风格会很有用,因为此处所需的功能取决于此。我对 RedAsh 的粗略 google 的理解是它运行在许多数据源之上,尽管我可能弄错了。
  • 我相信是t-sql

标签: sql redash


【解决方案1】:

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

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)

由于我不知道您是否可以访问 yearmonth 函数,另一种解决方案是将日期转换为 varchar 并按最左边的 7 个字符(年+月)分组

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)

【讨论】:

  • 我无法访问年月函数,如果我使用第二个代码,我会收到此错误“运行查询时出错:列“view_cw_wc_revenue.invoice_date”必须出现在 GROUP BY 子句中或被使用在聚合函数中”
  • 那是因为我忘记更改SELECT的字段,我现在编辑它。请再试一次,告诉我它是否有效!
【解决方案2】:

你可以试试ROLLUP。下图示例:

表格数据:

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 |
+------+--------------+---------------+-------------+

【讨论】:

  • 我无法使用年月函数
  • 但我仍然非常感谢您在这方面的帮助!!
  • 不客气。您可以将此方法作为支持月份函数的数据库的替代方法(例如MySQL)。
猜你喜欢
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多