此下面的查询将产生类似
的明智总和SELECT
tblPost.Post,
SUM(tblPost.LikeCount),
CASE WHEN tblPost.Time
BETWEEN (SELECT
CONVERT(VARCHAR(10),
DATEADD(DD,DATEDIFF(DD 0,GETDATE()),-60),120)) AND CONVERT(date,GETUTCDATE())
THEN 'Last 60 Days'
ELSE 'More Than 1 Year'
END AS"date type"
FROM tblPost
INNER JOIN tblProfile ON (tblProfile.ID=tblPost.UID)
INNER JOIN tblWatchList ON (tblWatchList.ID=tblProfile.UID)
WHERE dbo.tblPost.Time BETWEEN (SELECT
CONVERT(VARCHAR(10),
DATEADD(DD,DATEDIFF(DD,0,GETDATE()), -60),120))AND CONVERT(date,GETUTCDATE())
GROUP BY tblPost.Post,tblPost.Time
这是我的查询,它工作正常,但我想重写一下。我如何在此处对其进行描述...在我的查询中,我有两个GROUP BY
条款(tblPost.Post
,tblPost.Time
),而且我正好在这里遇到问题。我想重写此查询,例如我只能通过tblPost.Post
请帮帮我。
答案 0 :(得分:0)
您的WHERE子句已经消除了您为tblPost.Time提供的两个选项 - 您明确声明您只会检索"过去60天"那你为什么要在查询中烦扰整个CASE语句?
您正在加入甚至无法代表的表格。首先,请先清理您的查询,使用一些别名,然后放弃您不需要的内容:
SELECT P.Post, SUM(P.LikeCount)
FROM dbo.tblPost P
WHERE P.Time BETWEEN (SELECT CONVERT(VARCHAR(10), DATEADD(DD,DATEDIFF(DD,0,GETDATE()), -60),120)) AND CONVERT(date, GETUTCDATE())
GROUP BY P.Post