缩短并压缩此小SQL代码段(计数和最新日期)
缩短以下SQL代码段的最佳方法是什么:缩短并压缩此小SQL代码段(计数和最新日期),sql,count,date,Sql,Count,Date,缩短以下SQL代码段的最佳方法是什么: SELECT a.ViewCount, b.DateCreated FROM (SELECT COUNT(*) AS ViewCount FROM UserViewHistory uvh1 WHERE (UserID = @UserID) AND (ViewedByUserID = @RequestingUserID)) AS a,
SELECT a.ViewCount, b.DateCreated
FROM (SELECT COUNT(*) AS ViewCount
FROM UserViewHistory uvh1
WHERE (UserID = @UserID) AND (ViewedByUserID = @RequestingUserID)) AS a,
(SELECT TOP (1) DateCreated
FROM UserViewHistory uvh2
WHERE (UserID = @UserID) AND (ViewedByUserID = @RequestingUserID)
ORDER BY DateCreated DESC) b
这个查询的想法是拉取最后查看的日期,以及总的视图数——它可以按原样工作,但我想知道是否有更好的方法
提前感谢。我不知道DateCreated在这里的具体行为,但这可能会产生预期的结果吗
SELECT Count(*), MAX(DateCreated)
FROM UserViewHistory
WHERE (UserID = @UserID) AND (ViewedByUserID = @RequestingUserID)
编辑:删除了GROUP BY子句,因为它不是必需的;谢谢你的评论 您的SQL风格与我习惯的略有不同,但这是我的建议
Select max(datecreated) as [ViewedLast], COUNT(*) AS ViewCount
FROM UserViewHistory uvh1
WHERE (UserID = @UserID) AND (ViewedByUserID = @RequestingUserID)
如果我是你,我会停止使用隐式连接语法,因为这是一个非常糟糕的实践,可能会导致意外的交叉连接。显式连接语法自1992年以来一直是标准语法。看在上帝的份上,是时候停止使用这种糟糕的语法了。哦,你比我快了57秒:)从完美主义的角度来看,你不需要GROUP by子句,因为只有一行。@PowerUser:但你的答案更好。=)我不知道MAX()不需要分组…@Philipp:谢谢!我不知道=)谢谢你的及时回答,我实际上在MS SQL查询设计器中尝试了该查询,典型的情况是输入错误,没有注意到,因为它根本就不会有它-因此我把一些非常琐碎的东西变成了一些非常奇怪和过分的东西!再次感谢!