Использование SQL-запроса для удаления несовпадающих дубликатов в двух столбцах

Может ли кто-нибудь помочь мне с запросом, который можно выполнить, чтобы отображать только одну запись card_number в день, независимо от времени в Transit_date. См. изображение ниже. Заранее благодарим за любую помощь.

Использование SQL-запроса для удаления несовпадающих дубликатов в двух столбцах

Изображение находится настолько далеко, насколько я могу получить. Затем я попытался удалить дубликаты в Excel, но безуспешно. В среднем за каждый месяц, в котором необходимо создать отчет, содержится более 300 тыс. строк. Фактически мне нужно, чтобы в день отображался только один номер карты, а не несколько записей. Мы просто пытаемся узнать, кто заходил в систему в тот или иной день в течение месяца.

Попробуйте добавить ... GROUP BY CARD_NUMBER

Justinas 08.08.2024 13:20

Пожалуйста, не ссылайтесь на изображения. Добавьте всю необходимую информацию к вашему вопросу в виде редактируемого текста в соответствующем формате.

NickW 08.08.2024 13:26

Спасибо обоим за информацию. Я пробовал группировать по картам, но безуспешно.

R M 08.08.2024 13:58

Этот вопрос похож на: Получите по 1 верхней строке каждой группы. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.

siggemannen 08.08.2024 14:58

Привет, @siggemannen, я ответил на вопрос, к сожалению, РМ не просто не отметил ответ.

Derek Roberts 08.08.2024 15:55

Мы не публикуем здесь изображения кода или данных. Никто не будет просматривать этот запрос или образец данных как таковые, а это означает, что вы не получите помощь, пока не отредактируете вопрос, чтобы опубликовать данные в более удобном для использования виде.

Joel Coehoorn 08.08.2024 23:00

Спасибо всем за помощь. Это первый раз, когда я публикую вопрос. Я учел все предложения для следующего раза и отметил ответ, о котором я тоже не знал. Вот что я получаю за неправильное прочтение инструкции. Всем чудесного дня.

R M 09.08.2024 12:37
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
7
106
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Раньше я сталкивался с чем-то подобным. Этот код может помочь.

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;

Спасибо за информацию. Я запустил код, но он дает мне следующее:

R M 08.08.2024 13:59

Сообщение 195, уровень 15, состояние 10, строка 9 «ДАТА» не является распознаваемым именем встроенной функции. Сообщение 195, уровень 15, состояние 10, строка 18 «ДАТА» не является распознаваемым именем встроенной функции. Время завершения: 2024-08-08T12:52:27.0816821+01:00

R M 08.08.2024 13:59

@RM, тебе нужно указать там нужную дату

Derek Roberts 08.08.2024 14:00

Привет, Дерек, извини, я не дал больше контекста. Я изменил дату на нужные мне даты согласно вашим комментариям в сценарии. Кажется, ему не нравится использовать функцию DATE передtransit_date. Он работает только без добавления этой функции. Это дает мне результаты, аналогичные тем, что у меня есть на моем изображении. Если бы я мог сделать так, чтобы в день отображалась только одна карта, это положило бы конец.

R M 08.08.2024 14:05

@RM, не волнуйся, я изменил код, я просто назначаю дату, посмотрим, что произойдет.

Derek Roberts 08.08.2024 14:07

Дерек, это абсолютно идеально. Большое спасибо за вашу быструю помощь. Хорошего вам остатка дня.

R M 08.08.2024 14:13

вам следует применить такой фильтр, как «дата (transit_date)», потому что это временная метка, а не дата, и попробуйте «группировать по», вот так:

where cast (transit_date as date)>='2023-01-01' and cast(transit_date as date)<='2023-01-31'
group by card_number

Спасибо за эту информацию. Я выполнил запрос, но в нем указано, что «дата» не является признанной встроенной функцией.

R M 08.08.2024 13:59

Синтаксис неверен для сервера SQl. Это должна быть where cast (transit_date as date)>='2023-01-01' and cast(transit_date as date)<='2023-01-31' группа по номеру_карты.

Geezer 08.08.2024 19:20

Я отредактировал это @geezer, спасибо

Busra Ecem Sakar 09.08.2024 11:07

Попробуйте использовать различные, поскольку дата не указана в операторе выбора.

например

SELECT distinct
  c.[CARD_NUMBER],
  c.[NAME],
  c.[SURNAME],
  c.[IDENTIFIER],
  c.[USERTYPE]
FROM
  [dbo].[card_calling] c;

Другие вопросы по теме