2014-01-25 3 views
0

Я новичок в SQL и испытываю трудности с запросами, необходимыми для следующего отчета SSRS.Как написать sql-подзапрос с двумя диапазонами дат

У нас есть одна таблица, в которой указаны имя и дата. Дата соответствует дате, когда человек посетил мероприятие. Мы хотели бы запустить запрос с диапазоном дат и вывести список имен, которые посетили событие в этом диапазоне дат, а также ВСЕ их дат присутствия, даже если одна из дат находится за пределами диапазона

так за столом

NAME, DATE OF ATTENDENCE 
ALICE, 1/1/2000 
BOB, 1/1/2000 
CHARLIE, 1/1.2000 
ALICE, 1/1/2001 
ALICE, 1/1/2002 
BOB, 1/1/2002 

Мы хотел бы, чтобы запросить в течение года, скажем, 2002, а затем увидеть список всех, кто присутствовал на мероприятии в 02, и все другие даты посещаемости для этих людей, так 2002 будет показывать

ALICE, 1/1/2000 
ALICE, 1/1/2001 
ALICE, 1/1/2002 
BOB, 1/1/2000 
BOB, 1/1/2002 

У меня возникли проблемы с тем, как подойти к этому, я как sume Мне нужно несколько запросов, но я не могу полностью обдумать, как это сделать.

Любая помощь или совет будут оценены.

Спасибо.

MC

ответ

0

Вы можете сделать это с exists пункта:

select e.* 
from events e 
where exists (select 1 
       from events e2 
       where e2.name = e.name and 
        year(e2.DateOfAttendence) = 2002 
      ); 
0

Вы хотите использовать вложенный запрос. Рассмотрим следующую таблицу:

CREATE TABLE IF NOT EXISTS `events` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(32) NOT NULL, 
    `when` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`) 
); 

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

select * from `events` where name in (
    SELECT distinct name 
    FROM `events` 
    WHERE `when` >= STR_TO_DATE('24/01/2014', '%d/%m/%Y') 
    and `when` <= STR_TO_DATE('26/01/2014', '%d/%m/%Y') 
) 

..got ninja'd :(..

0

Я надеваю 't думаю, что подзапрос является ответом на вашу проблему. subquery возвращает только одно поле. вместо этого вы могли бы использовать вложенные запросы.

ищите что-то вроде этого

Select * 
     From TimeTable 
     Where Id In 
        (
         Select Id 
           From TimeTable 
           Where Date >= TO_DATE('01/01/2002 00:00:00', 'MM/DD/YYYY HH:MI:SS') And 
             Date < TO_DATE('01/01/2003 00:00:00', 'MM/DD/YYYY HH:MI:SS') 
        ) 
Смежные вопросы