我是SQL的新手,我对以下SSRS报告所需的查询有困难。
我们有一个表列出了名称和日期。日期对应于该人参加活动的日期。我们想要运行带有日期范围的查询,并提取已参加该日期范围内事件的名称列表及其所有出勤日期,即使其中一个日期超出范围
所以对于表
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
我遇到了如何解决这个问题的麻烦,我认为我需要多个查询,但我不能完全理解如何做到这一点。
任何帮助或建议将不胜感激。
感谢。
MC
答案 0 :(得分:0)
您可以使用exists
子句执行此操作:
select e.*
from events e
where exists (select 1
from events e2
where e2.name = e.name and
year(e2.DateOfAttendence) = 2002
);
答案 1 :(得分: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')
)
..得到了忍者:( ..
答案 2 :(得分:0)
我不认为子查询是你问题的答案。子查询只返回一个字段。 相反,你可以使用嵌套查询。
寻找类似的东西
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')
)