Может ли кто-нибудь помочь мне с запросом, который можно выполнить, чтобы отображать только одну запись card_number в день, независимо от времени в Transit_date. См. изображение ниже. Заранее благодарим за любую помощь.
Изображение находится настолько далеко, насколько я могу получить. Затем я попытался удалить дубликаты в Excel, но безуспешно. В среднем за каждый месяц, в котором необходимо создать отчет, содержится более 300 тыс. строк. Фактически мне нужно, чтобы в день отображался только один номер карты, а не несколько записей. Мы просто пытаемся узнать, кто заходил в систему в тот или иной день в течение месяца.
Пожалуйста, не ссылайтесь на изображения. Добавьте всю необходимую информацию к вашему вопросу в виде редактируемого текста в соответствующем формате.
Спасибо обоим за информацию. Я пробовал группировать по картам, но безуспешно.
Этот вопрос похож на: Получите по 1 верхней строке каждой группы. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.
Привет, @siggemannen, я ответил на вопрос, к сожалению, РМ не просто не отметил ответ.
Мы не публикуем здесь изображения кода или данных. Никто не будет просматривать этот запрос или образец данных как таковые, а это означает, что вы не получите помощь, пока не отредактируете вопрос, чтобы опубликовать данные в более удобном для использования виде.
Спасибо всем за помощь. Это первый раз, когда я публикую вопрос. Я учел все предложения для следующего раза и отметил ответ, о котором я тоже не знал. Вот что я получаю за неправильное прочтение инструкции. Всем чудесного дня.
Раньше я сталкивался с чем-то подобным. Этот код может помочь.
WITH RankedEntries AS (
SELECT
CARD_NUMBER,
TRANSIT_DATE,
NAME,
SURNAME,
IDENTIFIER,
USERTYPE,
ROW_NUMBER() OVER (
PARTITION BY CARD_NUMBER, CAST(TRANSIT_DATE AS DATE)
ORDER BY TRANSIT_DATE
) AS rn
FROM
your_table_name
WHERE
TRANSIT_DATE >= '2024-01-01' -- Replace with your start date
AND TRANSIT_DATE < '2024-02-01' -- Replace with your end date
)
SELECT
CARD_NUMBER,
CAST(TRANSIT_DATE AS DATE) AS TRANSIT_DAY,
NAME,
SURNAME,
IDENTIFIER,
USERTYPE
FROM
RankedEntries
WHERE
rn = 1
ORDER BY
CARD_NUMBER,
TRANSIT_DAY;
Спасибо за информацию. Я запустил код, но он дает мне следующее:
Сообщение 195, уровень 15, состояние 10, строка 9 «ДАТА» не является распознаваемым именем встроенной функции. Сообщение 195, уровень 15, состояние 10, строка 18 «ДАТА» не является распознаваемым именем встроенной функции. Время завершения: 2024-08-08T12:52:27.0816821+01:00
@RM, тебе нужно указать там нужную дату
Привет, Дерек, извини, я не дал больше контекста. Я изменил дату на нужные мне даты согласно вашим комментариям в сценарии. Кажется, ему не нравится использовать функцию DATE передtransit_date. Он работает только без добавления этой функции. Это дает мне результаты, аналогичные тем, что у меня есть на моем изображении. Если бы я мог сделать так, чтобы в день отображалась только одна карта, это положило бы конец.
@RM, не волнуйся, я изменил код, я просто назначаю дату, посмотрим, что произойдет.
Дерек, это абсолютно идеально. Большое спасибо за вашу быструю помощь. Хорошего вам остатка дня.
вам следует применить такой фильтр, как «дата (transit_date)», потому что это временная метка, а не дата, и попробуйте «группировать по», вот так:
where cast (transit_date as date)>='2023-01-01' and cast(transit_date as date)<='2023-01-31'
group by card_number
Спасибо за эту информацию. Я выполнил запрос, но в нем указано, что «дата» не является признанной встроенной функцией.
Синтаксис неверен для сервера SQl. Это должна быть where cast (transit_date as date)>='2023-01-01' and cast(transit_date as date)<='2023-01-31'
группа по номеру_карты.
Я отредактировал это @geezer, спасибо
Попробуйте использовать различные, поскольку дата не указана в операторе выбора.
например
SELECT distinct
c.[CARD_NUMBER],
c.[NAME],
c.[SURNAME],
c.[IDENTIFIER],
c.[USERTYPE]
FROM
[dbo].[card_calling] c;
Попробуйте добавить
... GROUP BY CARD_NUMBER