У меня есть 2 столбца, идентификатор и дата. Если дата находится на 2/3/16, 2/4/16, 2/5/16, я хочу вернуть все значения. Трудно объяснить, поэтому вот пример. Следующее должно вернуть все 3 строки для идентификатора 1 и ни одной из 2. Любая помощь будет оценена. Благодарность!

id     date
1      2/1/16
1      2/2/16
1      2/3/16
2      2/11/16 
2      2/12/16
0
jerry 24 Фев 2016 в 19:17

2 ответа

Лучший ответ

Попробуй это:

SELECT id, [date]
FROM mytable
WHERE id IN (SELECT Id  
             FROM mytable
             WHERE [date] IN ('2016-03-02', '2016-04-02', '2016-05-02'))
1
Giorgos Betsos 24 Фев 2016 в 16:21

Это синтаксис Oracle; попробуйте переписать его для SQL Server:

WITH T AS (
SELECT 1 AS ID, TO_DATE('2/1/16', 'DD/MM/YY') AS MY_DATE FROM DUAL UNION ALL
SELECT 1 AS ID, TO_DATE('2/2/16', 'DD/MM/YY') AS MY_DATE FROM DUAL UNION ALL
SELECT 1 AS ID, TO_DATE('2/3/16', 'DD/MM/YY') AS MY_DATE FROM DUAL UNION ALL
SELECT 2 AS ID, TO_DATE('2/11/16',  'DD/MM/YY') AS MY_DATE FROM DUAL UNION ALL
SELECT 2 AS ID, TO_DATE('2/12/16', 'DD/MM/YY') AS MY_DATE FROM DUAL
)
SELECT *
FROM T T1 WHERE EXISTS(
SELECT * FROM T T2
WHERE
 T1.ID = T2.ID
 AND T2.MY_DATE IN (TO_DATE('2/3/16', 'DD/MM/YY'), TO_DATE('2/4/16', 'DD/MM/YY'), TO_DATE('2/5/16', 'DD/MM/YY'))
);
0
Yellow75 24 Фев 2016 в 16:30