SQL подсчет уникальных значений с использованием диапазона дат в качестве условия WHERE [закрыто]

Вопрос или проблема

Многочастный идентификатор “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;

Объяснение:

  1. Объявление переменной: Если LastHoliday является фиксированной датой, мы используем переменную (например, @LastHoliday). Если это поле в таблице, то используем подзапрос.

  2. COUNT(DISTINCT): Мы используем COUNT(DISTINCT DateA) для подсчета уникальных дат праздников, что позволяет избежать двойного учета одних и тех же дат.

  3. JOIN с подзапросом: Если LastHoliday — это результат запроса, мы используем стандартный JOIN для связывания результатов.

Этот запрос позволит вам получить точное количество уникальных праздничных дат между последним праздником и текущей датой. Не забудьте адаптировать имена столбцов и переменные под вашу структуру базы данных.

Оцените материал
Добавить комментарий

Капча загружается...