Подсчитайте для каждого предмета и для каждого месяца в диапазоне дат количество предметов, которые находятся в инвентаре - mysql - PullRequest
1 голос
/ 11 апреля 2019

У меня есть таблица T1 с 3 столбцами: ProductBrand , PurchaseagedDate , SoldDate . ProductBrand представляет марку продукта. PurchaseagedDate содержит дату (в формате гггг-мм), когда мы приобрели продукт, а SoldDate содержит дату (снова в гггг-мм), когда мы продали этот продукт. Например:

ProductBrand  PurchasedDate  SoldDate
----------------------------------
Apple          2015-03      2015-05
Samsung        2014-01      2015-03
Sony           2016-02      2016-05 
Sony           2013-01      2013-08 
Apple          2015-05      2015-10 
LG             2011-02      2014-06 
Samsung        2017-02      2017-04 
LG             2016-01      2016-06 
LG             2018-06      2019-01

Мне бы хотелось, чтобы таблица, которая подсчитывала для каждой марки и для каждого месяца (между 2010-01 и 2019-12 гг.), Сколько продуктов этой конкретной марки у меня было за этот конкретный месяц в инвентаре. А именно, в этом примере у меня есть два продукта Apple. Первый оставался в запасе между 2015-03 и 2015-06, а второй оставался в запасе между 2015-04 и 2015-08. Поэтому я ожидаю, что таблица, которая имеет:

ProductBrand  YearMonthDate  NitemsInventory
------------  ------------   -------------------
Apple         2010-01               0
Apple         2010-02               0
...            ...                 ... 
Apple         2015-03               1
Apple         2015-04               2
Apple         2015-05               2
Apple         2015-06               2
Apple         2015-07               1
Apple         2015-08               1
Apple         2015-09               0
...            ...                 ...
Apple         2019-12               0

В одной таблице я хотел бы, чтобы все бренды были такими же, как в Apple. Таким образом, если у нас есть n различных марок и t - количество месяцев между (2010-01 и 2019-12), конечный массив будет иметь n раз t строки. Другими словами, я хотел бы видеть для каждого месяца количество предметов, которые у меня были в инвентаре для каждой марки.

Я использую mysql и полагаю, что попытался сгруппировать столбец ProductBrand of T1. Однако это не дает того, что я ожидаю.

1 Ответ

0 голосов
/ 11 апреля 2019

Мы можем сделать это с некоторыми большими уродливыми календарными таблицами:

SELECT
    t.ProductBrand,
    d.YearMonthDate,
    COUNT(t.ProductBrand) AS NitemsInventory
FROM
(
    SELECT DISTINCT ProductBrand FROM yourTable
) AS p
CROSS JOIN
(
    SELECT '2010-01' AS YearMonthDate UNION ALL
    SELECT '2010-02' UNION ALL
    SELECT '2010-03' UNION ALL
    ...
    SELECT '2015-03' UNION ALL
    SELECT '2015-04' UNION ALL
    ...
    SELECT '2019-12'
) AS d
LEFT JOIN yourTable t
    ON d.YearMonthDate BETWEEN t.PurchasedDate AND t.SoldDate AND
       p.ProductBrand = t.ProductBrand
WHERE
    t.productBrand IS NOT NULL
GROUP BY
    t.ProductBrand,
    d.YearMonthDate;

Вот демонстрационная программа, показывающая запрос в действии:

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...