SQL查询:比较返回记录中的两个日期

时间:2013-07-24 17:45:45

标签: sql sql-server sql-server-2008

我正在尝试为我现在手动执行的操作提供自动化解决方案,而且我只有最小的,简单的SQL技能。我通常会修改其他人构建的简单查询或构建基本的选择查询。我做了一些阅读,但不知道如何让它做我在这种情况下所需要的。我需要在我外出一个月时拿出别人可以使用的东西(当我回来时,这会节省我的时间)。

我需要的是返回下面的字段,其中tblThree.EndDate晚于tblFive.ServiceEnd。我必须在日期上做几个其他的比较,但如果我得到第一个的工作查询,我可以让它与其他人一起工作。我们使用MS SQL Server 2008。

我尝试使用别名创建子查询,并且在使其工作时失败了。

这些是我正在使用的表格和字段:

    tblOne.ServiceID
    tblOne.ServiceYear
    tblOne.Status
    tblTwo.AccountNbr
    tblTwo.AcctName
    tblThree.BeginDate (smalldatetime, null)
    tblThree.EndDate (smalldatetime, null)
    tblFour.ClientID
    tblFour.ServiceName
    tblFive.ContractID
    tblFive.ServiceBegin (smalldatetime, null)
    tblFive.ServiceEnd (smalldatetime, null)

这是表格的相关方式:

    tblOne.ServiceID = tblThree.ServiceID
    tblOne.ContractID = tblFive.ContractID
    tblOne.ClientID = tblFour.ClientID
    tblTwo.AccountNbr = tblFour.Account

我使用MS Access 2003生成Join SQL:

SELECT  tblOne.ServiceID, tblTwo.AccountNbr,
    tblTwo.AcctName, tblFour.ServiceName, tblOne.Status,
    tblThree.BeginDate, tblThree.EndDate,
    tblOne.ServiceYear, tblFive.ServiceBegin,
    tblFive.ServiceEnd

FROM  ((tblTwo INNER JOIN tblFour 
  ON  tblTwo.AccountNbr=tblFour.AccountNbr) INNER JOIN (tblThree INNER JOIN tblOne 
  ON  tblThree.ServiceID=tblOne.ServiceID) 
  ON  tblFour.ClientID=tblOne.ClientID) INNER JOIN tblFive 
  ON  tblOne.ContractID=tblFive.ContractID;

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

只需添加一个WHERE子句即可开始使用:

SELECT  tblOne.ServiceID, tblTwo.AccountNbr,
    tblTwo.AcctName, tblFour.ServiceName, tblOne.Status,
    tblThree.BeginDate, tblThree.EndDate,
    tblOne.ServiceYear, tblFive.ServiceBegin,
    tblFive.ServiceEnd

FROM  ((tblTwo INNER JOIN tblFour 
  ON  tblTwo.AccountNbr=tblFour.AccountNbr) INNER JOIN (tblThree INNER JOIN tblOne 
  ON  tblThree.ServiceID=tblOne.ServiceID) 
  ON  tblFour.ClientID=tblOne.ClientID) INNER JOIN tblFive 
  ON  tblOne.ContractID=tblFive.ContractID
WHERE tblThree.EndDate > tblFive.ServiceEnd;

答案 1 :(得分:0)

SELECT
    tblOne.ServiceID,
    tblOne.ServiceYear,
    tblOne.Status,
    tblTwo.AccountNbr,
    tblTwo.AcctName,
    tblThree.BeginDate,
    tblThree.EndDate,
    tblFour.ClientID,
    tblFour.ServiceName,
    tblFive.ContractID,
    tblFive.ServiceBegin,
    tblFive.ServiceEnd
FROM tblOne
INNER JOIN tblThree
ON tblOne.ServiceID = tblThree.ServiceID
INNER JOIN tblFive
ON tblOne.ContractID = tblFive.ContractID
INNER JOIN tblFour
ON tblOne.ClientID = tblFour.ClientID
INNER JOIN tblTwo
ON tblTwo.AccountNbr = tblFour.Account
WHERE tblThree.EndDate > tblFive.ServiceEnd