SQL: та же дата, но разные значения

У меня есть таблица, которая выглядит так

Станция год месяц день число А1 1990 г. 1 1 50 А1 1990 г. 1 1 60 А1 1990 г. 1 2 55 А1 1990 г. 1 3 10 А1 1990 г. 1 4 40

Например, результат запроса будет похож на приведенную ниже таблицу.

для той же станции и даты

Станция год месяц день число А1 1990 г. 1 1 50 А1 1990 г. 1 1 60

Как установить для него правильный SQL?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
452
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Если я правильно понимаю, вам нужны строки, в которых дублируются первые четыре столбца. Простой метод использует count(*):

select t.*
from (select t.*,
             count(*) over (partition by station, year, month, date) as cnt
      from t
     ) t
where cnt > 1;

Этот ответ не соответствует требованию, указанному в заголовке вопроса: «SQL: та же дата, но разные значения».

Popeye 16.12.2020 04:27

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

SELECT t1.*
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
              WHERE t2.Station = t1.Station AND t2.year = t1.year AND
                    t2.month = t1.month AND t2.day = t1.day AND t2.id <> t1.id);

Если у вас нет такого столбца id, то здесь мы также можем использовать агрегацию:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT Station, year, month, day
    FROM yourTable
    GROUP BY Station, year, month, day
    HAVING COUNT(*) > 1
) t2
    ON t2.Station = t1.Station AND t2.year = t1.year AND t2.month = t1.month AND
       t2.day = t1.day;

Вы можете использовать предложение exists, чтобы найти точный дубликат с другим номером следующим образом:

Select t.*
  From your_table t
 Where exists
   (select 1 from your_table tt
     Where tt.station = t.station
       And tt.year = t.year
       And tt.month = t.month
       And tt.date = t.date
       And tt.number <> t.number)     

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