SQL: нужно возвращать результаты, когда элемент в столбце повторяется только два или более лет - PullRequest
0 голосов
/ 29 сентября 2018
Div_ID  TY_YEAR
10040   2017
10045   2017
10050   2017
10050   2018
10052   2017
10052   2018
10053   2017
10053   2018

Мне нужен результирующий набор DIV_ID, которые будут специально доступны в 2017 и 2018 годах. РЕЗУЛЬТАТ:

 Div_ID  TY_YEAR
    10050   2017
    10050   2018
    10052   2017
    10052   2018
    10053   2017
    10053   2018

Ответы [ 3 ]

0 голосов
/ 29 сентября 2018

Я бы получил список идентификаторов, сгруппировав их по годам и посчитав количество различных лет. Затем вы можете запросить все строки, имеющие эти идентификаторы:

SELECT *
FROM   mytable
WHERE  div_id IN (SELECT   div_id
                  FROM     mytable
                  WHERE    ty_year IN (2017, 2018)
                  GROUP BY div_id
                  HAVING   COUNT(DISTINCT td_year) = 2)
0 голосов
/ 29 сентября 2018
DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id INT NOT NULL
,year INT NOT NULL
,PRIMARY KEY(id,year)
);

INSERT INTO my_table VALUES
(40,'2017'),
(45,'2017'),
(50,'2017'),
(50,'2018'),
(52,'2017'),
(52,'2018'),
(53,'2017'),
(53,'2018');

SELECT DISTINCT x.* 
  FROM my_table x 
  JOIN my_table y
    ON y.id = x.id
   AND y.year <> x.year;
 WHERE y.id IS NULL;

  +----+------+
  | id | year |
  +----+------+
  | 50 | 2017 |
  | 50 | 2018 |
  | 52 | 2017 |
  | 52 | 2018 |
  | 53 | 2017 |
  | 53 | 2018 |
  +----+------+
0 голосов
/ 29 сентября 2018

Вы можете попробовать что-то вроде этого -

select *
  from your_table
 where div_id in (select div_id
                    from your_table
                   where ty_year in (2017, 2018)
                   group by div_id
                  having count(distinct ty_year) >= 2)
...