缩短并压缩此小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,

缩短以下SQL代码段的最佳方法是什么:

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查询设计器中尝试了该查询,典型的情况是输入错误,没有注意到,因为它根本就不会有它-因此我把一些非常琐碎的东西变成了一些非常奇怪和过分的东西!再次感谢!