我有一个查询来选择3个条件的数据,但是需要插入一个额外的子句来只选择一个特定的月份
问题描述:
我的[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)
答
如何只在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和当前月份的
答
看一看下面的查询,它可以帮助
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
答
如果您使用的是正常DATETIME
字段我喜欢按月使用DATEDIFF
来比较的技巧。尝试添加这对您的where子句(你的问题是,如果你想的日期在外部查询或子查询比较不明确的):
AND DATEDIFF(month, 0, r1.[Date Created]) = DATEDIFF(month, 0, GETDATE()) - 1
这几个月的数量从1/1/1900
不知道的比较来自你问题的细节。什么类型的字段是“创建日期”?如果它是一个日期字段,那么它不是真正的格式,它只是用你用来查询它的任何工具显示的方式。如果它是一个字符字段,那么你做错了:) –