簡體   English   中英

使用此SQL語句按用戶名分組的最佳方法是什么?

[英]What is the best way to group by username with this SQL statement?

SELECT 
  M.FromUserID,
  UF.Fname + ' ' + UF.Sname As FullName,
  UF.URL as Username,
  Subject,
  Body,
  M.Ctime,
  M.ViewedDate,
  M.MessageID,
  M.Starred,
  M.Deleted,
  M.ToUserID,
  (SELECT TOP 1 Fname + ' ' + Sname as FullName FROM user_basics UB WHERE UB.UserID = M.ToUserID) as ToName,
  (SELECT TOP 1 URL FROM user_basics UB WHERE UB.UserID = M.ToUserID) as ToUserName 
FROM Messages M 
  LEFT JOIN User_Basics UF ON UF.userID = M.FromUserID 
WHERE M.ToUserID = 1433 AND Deleted IS NULL ORDER BY M.Ctime DESC

我想顯示一條消息歷史記錄,其中最近的消息首先按用戶名分組...

當我使用分組方法時,它告訴我需要在所有其他列中添加...

Column 'Messages.FromUserID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

一定會有更好的辦法?

使用ROW_NUMBER() OVER (PARTITION BY M.FromUserID ORDER BY M.ViewedDate DESC)

WITH CTE AS
(
   SELECT 
     M.FromUserID,
     UF.Fname + ' ' + UF.Sname As FullName,
     UF.URL as Username,
     Subject,
     Body,
     M.Ctime,
     M.ViewedDate,
     M.MessageID,
     M.Starred,
     M.Deleted,
     M.ToUserID,
     (SELECT TOP 1 Fname + ' ' + Sname as FullName FROM user_basics UB WHERE UB.UserID = M.ToUserID) as ToName,
     (SELECT TOP 1 URL FROM user_basics UB WHERE UB.UserID = M.ToUserID) as ToUserName, 
     RN = ROW_NUMBER() OVER (PARTITION BY M.FromUserID ORDER BY M.ViewedDate DESC)
  FROM Messages M 
  LEFT JOIN User_Basics UF ON UF.userID = M.FromUserID 
  WHERE M.ToUserID = 1433 
  AND Deleted IS NULL 
)
SELECT * FROM CTE
WHERE RN = 1
ORDER BY Ctime DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM