Группа не работает правильно для диапазона дат в SQL

Я боролся с этим в течение нескольких месяцев и, наконец, нашел способ отключить переходные ссылки проектов в Core.

В файле .csproj для .Facade.EF вы можете добавить PrivateAssets="All" к ProjectReference к .DAL:


  

С помощью этой настройки проекты, которые ссылаются .Facade.EF, больше не ссылаются на DAL.

В более абстрактных терминах, если вы хотите, чтобы A ссылался на B и B на ссылку C, но не хотел, чтобы A ссылался на C, добавьте это:

В B.csproj


  

Источник: https://github.com/dotnet/project-system/issues/2313

1
задан GMB 31 March 2019 в 01:02
поделиться

1 ответ

Вот решение, которое корректно работает с вашими образцами данных. Он генерирует список дат, используя различные значения, которые можно найти в столбце created_date, а затем LEFT JOIN сопоставляет его с таблицей. Условия JOIN несут логику, которую вы описали. Мне кажется, что вам не нужно проверять status записей, поскольку, по-видимому, любая запись, которая не имеет NULL completed_date, находится в статусе Comp.

SELECT 
    dt.created_date,
    COUNT(t.id)
FROM 
    (SELECT DISTINCT created_date FROM mytable) dt
    LEFT JOIN mytable t
        ON t.created_date <= dt.created_date 
        AND (t.completed_date IS NULL OR t.completed_date > dt.created_date)
GROUP BY dt.created_date

Это Демонстрация на DB Fiddle с вашими примерами возвращает данные:

| created_date | COUNT(t.id) |
| ------------ | ----------- |
| 2019-03-18   | 1           |
| 2019-03-19   | 2           |
| 2019-03-20   | 4           |
| 2019-03-21   | 4           |
| 2019-03-22   | 3           |
0
ответ дан GMB 31 March 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: