У меня есть таблица измерений дат.Начинается с 1900-01-01 и включает день на каждый день до 2199-12-31.Мне нужно найти пропущенную любую дату.
Я пробовал почти каждый запрос в Интернете.Мое понимание sql не достаточно хорошо, чтобы разбить запрос на части, чтобы понять.Кроме того, у меня нет разрешения на написание временных таблиц (работающих над этим), так что это мешает некоторым.
Вот один, который я попробовал.Мой столбец называется ShortDate.Есть также столбец longdate, который я попробовал в сравнении, но не пошел.Имя таблицы - dimDate.
{
SELECT t1.ShortDate AS startOfGap, MIN(t2.ShortDate) AS endOfGap
FROM
(SELECT ShortDate = ShortDate + 1 FROM sampleDates tbl1
WHERE NOT EXISTS(SELECT * FROM [Shared].[dimDates] tbl2
WHERE tbl2.ShortDate = tbl1.ShortDate + 1)
AND ShortDate <> (SELECT MAX(ShortDate) FROM [Shared].[dimDates]))
t1
INNER JOIN
(SELECT ShortDate = ShortDate – 1 FROM [Shared].[dimDates] tbl1
WHERE NOT EXISTS(SELECT * FROM [Shared].[dimDates] tbl2
WHERE tbl1.theDate = tbl2.theDate + 1)
AND ShortDate <> (SELECT MIN(ShortDate) FROM [Shared].
[dimDates])) t2
ON t1.ShortDate <= t2.ShortDate
GROUP BY t1.ShortDate;
}
Я просто получаю множество ошибок с каждым запросом, который пытаюсь выполнить.К сожалению, моя логика недостаточно хороша, чтобы понять, что ДОЛЖНО быть в этом запросе
Я пробовал этот:
SELECT TOP 1
DateShort + 1
FROM [Shared].[dimDates] mo
WHERE NOT EXISTS
(
SELECT NULL
FROM [Shared].[dimDates] mi
WHERE mi.DateShort = mo.DateShort + 1
)
ORDER BY DateShort
, но получаю ошибку, что преобразование состояний не удалось при преобразованииЗначение nvarchar '2029-10-02' для типа данных int