如何编写具有2个日期范围的sql子查询

如何编写具有2个日期范围的sql子查询,sql,reporting-services,Sql,Reporting Services,我是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 我们希

我是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

您可以使用exists子句执行此操作:


您将希望使用嵌套查询。考虑下表:

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')
)

…得到忍者d:…

我认为子查询并不能解决您的问题。子查询只返回单个字段。 相反,您可以使用嵌套查询

找像这样的东西

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') 
                    )
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') 
                    )