下面的查询将产生类似的事后总和
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
请帮助我。
最佳答案
您的 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
关于mysql - 仅使用 1 个 group by 子句重写查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30390033/