Проверка дублей остатков по месяцам
| Месяц | Строк остатков | Уникальных артикулов | Лишних строк | Доля лишних строк | Штук на складе | Стоимость остатка, руб. |
|---|---|---|---|---|---|---|
| 2025-01-31 | 20 | 20 | 0 | 0 % | 2 415 | 19 285 102 ₽ |
| 2025-02-28 | 20 | 20 | 0 | 0 % | 2 808 | 20 165 168 ₽ |
| 2025-03-31 | 20 | 20 | 0 | 0 % | 3 053 | 22 833 348 ₽ |
| 2025-04-30 | 20 | 20 | 0 | 0 % | 2 991 | 22 553 002 ₽ |
| 2025-05-31 | 20 | 20 | 0 | 0 % | 2 702 | 19 721 951 ₽ |
| 2025-06-30 | 20 | 20 | 0 | 0 % | 2 297 | 18 401 912 ₽ |
| 2025-07-31 | 20 | 20 | 0 | 0 % | 2 230 | 17 140 528 ₽ |
| 2025-08-31 | 20 | 20 | 0 | 0 % | 2 700 | 20 062 742 ₽ |
| 2025-09-30 | 20 | 20 | 0 | 0 % | 3 066 | 22 898 690 ₽ |
| 2025-10-31 | 20 | 20 | 0 | 0 % | 3 491 | 26 055 968 ₽ |
| 2025-11-30 | 20 | 20 | 0 | 0 % | 3 383 | 26 421 494 ₽ |
| 2025-12-31 | 20 | 20 | 0 | 0 % | 3 708 | 28 658 954 ₽ |
SQL, по которому посчитано
WITH base AS (
SELECT
date,
sku,
units,
value
FROM stock
WHERE date >= (SELECT date_trunc('month', max(date)) - INTERVAL '11 months' FROM stock)
),
monthly AS (
SELECT
date,
count(*) AS row_count,
count(DISTINCT sku) AS sku_count,
count(*) - count(DISTINCT sku) AS extra_rows,
sum(units) AS units_total,
sum(value) AS value_sum
FROM base
GROUP BY date
)
SELECT
date,
row_count,
sku_count,
extra_rows,
round(extra_rows::DOUBLE / row_count, 4) AS extra_share,
units_total,
round(value_sum, 0) AS value_total
FROM monthly
ORDER BY date