【问题标题】:MYSQL - Fetch records between two dates using GROUP BY and INNER JOIN from one tableMYSQL - 使用 GROUP BY 和 INNER JOIN 从一个表中获取两个日期之间的记录
【发布时间】:2020-07-21 13:30:29
【问题描述】:

我有一个下表:

SELECT * FROM dashboard.reports WHERE date='2020-04-06';
+------+--------------+----------+----------+----------+
| # id |     date     | type     | quantity |  vendor  |
+------+--------------+----------+----------+----------+
| '11' | '2020-04-06' | '2520'   | '150'    | 'vendor1'  |
| '12' | '2020-04-06' | 'HG851'  | '200'    | 'vendor2' |
| '13' | '2020-04-06' | 'HG851'  | '200'    | 'vendor2' |
| '14' | '2020-04-06' | 'HG851A' | '400'    | 'vendor2' |
+------+--------------+----------+----------+----------+

我必须按特定日期的 GROUP BY 供应商计算数量列的总数。所以下面是我的查询:

SELECT a.date, a.vendor, a.type, a.quantity, b.total FROM dashboard.reports a 
INNER JOIN 
(
    SELECT vendor, SUM(quantity) as total FROM dashboard.reports WHERE date = '2020-04-06' GROUP BY vendor
) b 
ON b.vendor = a.vendor WHERE date = '2020-04-06'

结果:(这里的总数是日期'2020-04-06')

+--------------+----------+----------+----------+-------+
|    # date    |  vendor  | type | quantity | total |
+--------------+----------+----------+----------+-------+
| '2020-04-0'  | 'vendor1'  | '2520'   | '150'    | '150' |
| '2020-04-06' | 'vendor2' | 'HG851'  | '200'    | '800' |
| '2020-04-06' | 'vendor2' | 'HG851'  | '200'    | '800' |
| '2020-04-06' | 'vendor2' | 'HG851A' | '400'    | '800' |
+--------------+----------+----------+----------+-------+

vendor1 总计 ---> 150 vendor2 总计 (200 + 200 + 400) ----> 800

上述结果在某一天按预期工作。但是,如果我想获取两个日期之间的记录……我不确定如何编写查询。我试过低于一个,但我一整天都得到了总数。我想要单独每天的数量列的总数。

SELECT a.date, a.vendor, a.type, a.quantity, b.total FROM dashboard.reports a 
INNER JOIN 
(
    SELECT vendor, SUM(quantity) as total FROM dashboard.reports WHERE  date >= '2020-04-06' AND date <= '2020-04-08' GROUP BY vendor
) b 
ON b.vendor = a.vendor WHERE date >= '2020-04-06' AND date <= '2020-04-08'
+--------------+----------+-------------+----------+---------+
|    # date    |  vendor  |  type   | quantity |  total  |
+--------------+----------+-------------+----------+---------+
| '2020-04-06' | 'vendor1'  | '2520'      | '150'    | '1250'  |
| '2020-04-06' | 'vendor2' | 'HG851'     | '200'    | '1400'  |
| '2020-04-06' | 'vendor2' | 'HG851'     | '200'    | '1400'  |
| '2020-04-06' | 'vendor2' | 'HG851A'    | '400'    | '1400'  |
| '2020-04-07' | 'vendor1'  | '2511'      | '200'    | '1250'  |
| '2020-04-07' | 'vendor1'  | '5120'      | '350'    | '1250'  |
| '2020-04-07' | 'vendor1'  | '2520'      | '150'    | '1250'  |
| '2020-04-07' | 'vendor1'  | '5114'      | '400'    | '1250'  |
| '2020-04-07' | 'vendor3'  | 'G-440G-A'  | '200'    | '20750' |
| '2020-04-07' | 'vendor3'  | '1240GA'    | '400'    | '20750' |
| '2020-04-07' | 'vendor3'  | '1440GP'    | '9000'   | '20750' |
| '2020-04-07' | 'vendor3'  | 'B-0404G-B' | '7000'   | '20750' |
| '2020-04-07' | 'vendor3'  | 'B2404GP'   | '2000'   | '20750' |
| '2020-04-07' | 'vendor3'  | 'G-881G-A'  | '2000'   | '20750' |
| '2020-04-08' | 'vendor3'  | 'G-881G-B'  | '150'    | '20750' |
| '2020-04-08' | 'vendor2' | 'HG851'     | '200'    | '1400'  |
| '2020-04-08' | 'vendor2' | 'HG851A'    | '400'    | '1400'  |
+--------------+----------+-------------+----------+---------+

有人可以帮我解决这个问题吗?如果我上面写的查询完全错误,请指导我如何进一步处理。

【问题讨论】:

    标签: mysql sql database group-by inner-join


    【解决方案1】:

    也按日期分组。即:“按供应商、日期分组”

    【讨论】:

    • 我试过...但得到重复记录。 # 日期,供应商,ont_type,数量,总计 1. '2020-04-06', 'ZHONE', '2520', '150', '150' 2. '2020-04-06', 'ZHONE', ' 2520', '150', '1100' 3. '2020-04-06', '华为', 'HG851', '200', '800' 4. '2020-04-06', '华为', ' HG851'、'200'、'600'
    • SELECT a.date, a.vendor, a.ont_type, a.quantity, b.total FROM dashboard.reports a INNER JOIN ( SELECT vendor, SUM(quantity) as total FROM dashboard.reports WHERE date >= '2020-04-06' AND date = '2020-04-06' AND date
    • 尝试在日期以及供应商上进行加入。
    • 在 a.vendor =b.vendor 和 a.date =b.date
    猜你喜欢
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多