2017-08-10 48 views
0

我的[date created]数据的格式如下04/08/2017 20:06:14。我下面的查询返回表中所有日期的数据,但我只需要上个月的数据,但我不确定如何转换我的日期/时间以及何处在代码中插入额外的where子句。我有一个查询来选择3个条件的数据,但是需要插入一个额外的子句来只选择一个特定的月份

SELECT r1.requestId, 
     r1.memberID, 
     r1.department, 
     r1.[Date Created], 
     r1.scheme 
FROM Requests r1 
WHERE EXISTS 
    (SELECT COUNT() 
    FROM requests r2 
    WHERE r2.memberId = r1. memberId 
     AND r2.department = r1.department 
     AND r2.[Date Created] = r1.[Date Created] 
    GROUP BY r2.memberId,r2.departmetId,r2.[Date Created] 
    HAVING COUNT() > 3) 
+0

不知道的比较来自你问题的细节。什么类型的字段是“创建日期”?如果它是一个日期字段,那么它不是真正的格式,它只是用你用来查询它的任何工具显示的方式。如果它是一个字符字段,那么你做错了:) –

回答

0

如何只在WHERE子句中添加另一个条件:

SELECT r1.requestId, 
     r1.memberID, 
     r1.department, 
     r1.[Date Created], 
     r1.scheme 
FROM Requests r1 
WHERE EXISTS 
     (SELECT COUNT() 
     FROM requests r2 
     WHERE r2.memberId = r1. memberId 
      AND r2.department = r1.department 
      AND r2.[Date Created] = r1.[Date Created] 
     GROUP BY r2.memberId,r2.departmetId,r2.[Date Created] 
     HAVING COUNT() > 3) 
    AND r1.[Date Created] BETWEEN DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0) --First day of previous month 
          AND DATEADD(SECOND,-1, DATEADD(DAY,1,DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1))) --Last Day of previous month 
+0

可能不想为此使用'between',只需使用上个月的> = 1rst和当前月份的<1rst。除非你想花费几个小时研究会计部门在23:59:59.237'的请求时在报告中发现的差异,并且它不会在任何一个月出现...... –

0

看一看下面的查询,它可以帮助

SELECT r1.requestId, 
    r1.memberID, 
    r1.department, 
    r1.[Date Created], 
    r1.scheme 
FROM Requests r1 

where 

( 
    Year(r1.[Date Created])*12 + MONTH(r1.[Date Created]) = YEAR(getdate())+Month(Getdate()) 
) 
and 
count(*) over(partition by r1.memberId,r1.department,r1.[Date Created])>3 
0

如果您使用的是正常DATETIME字段我喜欢按月使用DATEDIFF来比较的技巧。尝试添加这对您的where子句(你的问题是,如果你想的日期在外部查询或子查询比较不明确的):

AND DATEDIFF(month, 0, r1.[Date Created]) = DATEDIFF(month, 0, GETDATE()) - 1 

这几个月的数量从1/1/1900

相关问题