【问题标题】:How to get Top 25 records order by createdon using SQL query?如何使用 SQL 查询通过 createdon 获取前 25 条记录顺序?
【发布时间】:2011-02-24 19:06:32
【问题描述】:

我有两个表,例如 updatetext 和 users 我想从 updatetext 中获得不同的记录。表用户具有与用户信息相关的唯一记录,而 updatetext 具有多个 updatetext 记录...我想从 updatetext 表中获取最新的更新。 .我怎么能得到?

Users Table
1) userid
2) username
3) password
4) createdon

UpdateText Table
1) updatetextID
2) userid
3) updateScrap
4) createdon
3) location

更新文本

updatetextID    userid  updateScrap     Createdon
     11      535     yes good test      2/23/2011 9:59
     12      540    udpate sample       2/23/2011 9:58
     13       44    Absas               2/22/2011 12:30
     14       20    test text 123       2/22/2011 12:24
     15      540    hi how are you?     2/22/2011 12:00
     16      535    Hi r u there?       2/22/2011 12:30
     17      540    welcome back        2/22/2011 10:23

用户

userid  username    password    
535 abhi        
540 shankar     
44  dhaval      
20  john        

我想从 UpdateText 表中获取 top createdon 记录和 从用户表中获取用户名和密码.. 请帮帮我。

【问题讨论】:

  • 能否提供样本数据?到目前为止,您对答案的评论毫无意义。您是指“每位用户前 25 名”还是“每位用户前 25 名,最新”?

标签: sql-server sql-server-2005 sql


【解决方案1】:
SELECT  TOP 25 
        ut.*
        ,u.username
        ,u.password
FROM    [UpdateText] ut
JOIN    Users u ON  ut.userid = u.userid
JOIN    (   SELECT  MAX(ut2.createdon) as maxcreatedon
                    ,ut2.userid
            FROM    [UpdateText] ut2
            GROUP BY ut2.userid
        ) x ON x.maxcreatedon = ut.createdon
            AND x.userid = ut.userid
ORDER BY ut.createdon DESC

也许您正在寻找类似的东西?

【讨论】:

  • 以下答案也有效。用了CTE,是不是优化sql查询的好办法?
【解决方案2】:

这是前 25 个,每个用户的最新更新。我猜这就是你真正的意思

;WITH CTE AS
(
  SELECT
     *,
     ROW_NUMBER() OVER (PARTITION BY userid ORDER BY createdon) AS RankNum
  FROM
     [UpdateText]
)
SELECT TOP 25
   *
FROM
   CTE 
   JOIN
   Users U ON CTE.userid  = U.userid 
WHERE
   RankNum = 1
ORDER BY
   CTE.createdon

【讨论】:

  • 非常感谢@gbn 解决方案很好。我喜欢它...谢谢你
【解决方案3】:

不确定我是否完全理解,但请尝试以下内容:

SELECT * FROM UpdateText 
   INNER JOIN Users ON UpdateText.userid = Users.userid
ORDER BY UpdateText.createdon DESC LIMIT 25

【讨论】:

  • 但是我在执行查询时获取了多个 userId。在我的 updatetext 表中有很多用户更新。回复我。
猜你喜欢
  • 2012-03-12
  • 2019-01-20
  • 1970-01-01
  • 2015-11-20
  • 2011-04-23
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2021-11-08
相关资源
最近更新 更多