Вопрос или проблема
Многочастный идентификатор “LastHoliday” не может быть связан
Ошибка выше возникла при попытке выполнения следующих двух скриптов.
Проверено
SELECT Count(DISTINCT DateA)
FROM Holiday
WHERE Holiday.DateA BETWEEN LastHoliday AND CURRENT_TIMESTAMP
Проверено
SELECT Count(DateA)
FROM Holiday
WHERE Holiday.DateA BETWEEN LastHoliday AND CURRENT_TIMESTAMP
GROUP BY Holiday.DateA
Мне нужно, чтобы при наличии нескольких праздников в одну и ту же дату он считался 1 днем между последним праздником и текущей временной меткой
.
Ответ или решение
Задача заключается в подсчете уникальных дат праздников между последним праздником и текущей отметкой времени. Ошибка "многочастный идентификатор ‘LastHoliday’ не может быть связан" возникает, потому что SQL не распознает LastHoliday
как действительный идентификатор. Предположительно, это не столбец таблицы, а переменная или подзапрос, которые необходимо правильно объявить.
Для решения задачи давайте предположим, что у вас есть переменная, которая хранит дату последнего праздника, или мы можем извлечь эту дату через подзапрос. Приведем пример, как правильно выполнять подсчет уникальных праздников:
Шаг 1: Определение последнего праздника
В первом шаге возьмем дату последнего праздника. Если у вас есть отдельная таблица или давайте предположим, что LastHoliday
— это столбец в вашей таблице, мы можем получить значение с помощью подзапроса. Если это просто фиксированная дата, вы можете заменить LastHoliday
на эту дату.
Шаг 2: Построение SQL-запроса
Вот как вы можете построить ваш SQL-запрос:
-- Пример, если LastHoliday это фиксированная дата
DECLARE @LastHoliday DATETIME = '2023-01-01'; -- Замените на вашу дату
SELECT COUNT(DISTINCT DateA)
FROM Holiday
WHERE DateA BETWEEN @LastHoliday AND CURRENT_TIMESTAMP;
Альтернативный вариант с подзапросом
Если вам нужно определить LastHoliday
из самой таблицы, можно использовать подзапрос. Вот пример:
-- Предположим, что мы хотим найти самый последний праздник из таблицы
WITH LastHoliday AS (
SELECT MAX(DateA) AS LastDate
FROM Holiday
)
SELECT COUNT(DISTINCT h.DateA)
FROM Holiday AS h
JOIN LastHoliday AS lh ON h.DateA BETWEEN lh.LastDate AND CURRENT_TIMESTAMP;
Объяснение:
-
Объявление переменной: Если
LastHoliday
является фиксированной датой, мы используем переменную (например,@LastHoliday
). Если это поле в таблице, то используем подзапрос. -
COUNT(DISTINCT): Мы используем
COUNT(DISTINCT DateA)
для подсчета уникальных дат праздников, что позволяет избежать двойного учета одних и тех же дат. -
JOIN с подзапросом: Если
LastHoliday
— это результат запроса, мы используем стандартныйJOIN
для связывания результатов.
Этот запрос позволит вам получить точное количество уникальных праздничных дат между последним праздником и текущей датой. Не забудьте адаптировать имена столбцов и переменные под вашу структуру базы данных.