【问题标题】:Generate full category structure by date range history按日期范围历史生成完整的类别结构
【发布时间】:2013-10-29 16:04:39
【问题描述】:

我正在尝试查询 MySQL。我有 2 个表,数据如下所示:

category_history_structure

+----------------+-----------------+----------+----+-----------+------------+------------+
| category       | parent_category | type     | id | parent_id | from_date  | to_date    |
+----------------+-----------------+----------+----+-----------+------------+------------+
| Top level      |                 | category | 1  | 0         | 01.01.2013 | 01.01.2015 |
+----------------+-----------------+----------+----+-----------+------------+------------+
| Category 1     | Top level       | category | 2  | 1         | 01.01.2013 | 01.01.2015 |
+----------------+-----------------+----------+----+-----------+------------+------------+
| Category 2     | Top level       | category | 3  | 1         | 01.01.2013 | 01.01.2015 |
+----------------+-----------------+----------+----+-----------+------------+------------+
| Sub category 1 | Category 1      | category | 4  | 2         | 01.01.2013 | 01.01.2015 |
+----------------+-----------------+----------+----+-----------+------------+------------+
| Sub category 2 | Category 1      | category | 5  | 2         | 01.01.2013 | 01.03.2013 |
+----------------+-----------------+----------+----+-----------+------------+------------+
| Sub category 2 | Category 2      | category | 5  | 3         | 02.03.2013 | 01.01.2015 |
+----------------+-----------------+----------+----+-----------+------------+------------+
| Product 1      | Sub category 2  | product  | 6  | 5         | 01.01.2013 | 01.01.2015 |
+----------------+-----------------+----------+----+-----------+------------+------------+

product_sells

+----+-----------+------+------------+
| id | product   | sell | date       |
+----+-----------+------+------------+
| 6  | Product 1 | 2    | 01.02.2013 |
+----+-----------+------+------------+
| 6  | Product 1 | 1    | 01.05.2013 |
+----+-----------+------+------------+
| 6  | Product 1 | 3    | 01.06.2013 |
+----+-----------+------+------------+

我需要从日期范围 2013-01-01 - 2015-01-01 开始销售,按类别分组。 尝试创建按类别输出销售的查询,问题是“子类别 2”已更改为 Parent_Category/parent_id,结果必须在“产品 1”的 2 行中

结果

+-----------+------------+----------------+-----------+------------+------------+------+
| Top level | Category   | Sub category   | Product   | from_date  | to_date    | sell |
+-----------+------------+----------------+-----------+------------+------------+------+
| Top level | Category 1 | Sub category 2 | Product 1 | 01.01.2013 | 01.03.2013 | 2    |
+-----------+------------+----------------+-----------+------------+------------+------+
| Top level | Category 2 | Sub category 2 | Product 1 | 02.03.2013 | 01.01.2015 | 4    |
+-----------+------------+----------------+-----------+------------+------------+------+

【问题讨论】:

    标签: mysql join date-range


    【解决方案1】:

    这是一个 sqlfiddle: http://sqlfiddle.com/#!2/cdb68/3。 我把日期放在 mysql 格式中。我假设“01.06.2013”​​表示“2013 年 6 月 1 日”或“2013-06-01”。

    SELECT 
    'Top level',
    cat.parent_category as category, 
    subcat.parent_category as subcategory, 
    ps.product,
    cat.from_date, cat.to_date, 
    SUM(ps.sell)
    
    
    FROM product_sells AS ps
    LEFT JOIN category_history_structure as subcat
    ON (
      ps.id = subcat.id
      AND ps.date BETWEEN subcat.from_date AND subcat.to_date
      AND subcat.type = 'product'
      )
    LEFT JOIN category_history_structure as cat
    ON (
      subcat.parent_id = cat.id
      AND ps.date BETWEEN cat.from_date AND cat.to_date
      AND cat.type = 'category'
      )
    
    GROUP BY category;
    

    如果顶级类别也发生了变化,可能会出现问题,但这可以通过另一个 LEFT JOIN 来解决。另外,我假设产品只属于子类别,而不是直接属于类别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 2020-03-28
      • 2021-06-15
      • 2023-03-28
      相关资源
      最近更新 更多