Я боролся с этим в течение нескольких месяцев и, наконец, нашел способ отключить переходные ссылки проектов в 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
Вот решение, которое корректно работает с вашими образцами данных. Он генерирует список дат, используя различные значения, которые можно найти в столбце 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 |