繁体   English   中英

不同表的TOP 3结果的SQL查询

[英]SQL query for TOP 3 results from different tables

我是SQL查询的新手,需要帮助才能从不同的表中形成TOP 3结果。

这是每个表1个结果的代码。

SELECT c.name AS board, a.id,
CASE a.parentid
WHEN 0
THEN a.id
ELSE a.parentid
END AS parentid, a.message, a.name, a.timestamp
FROM posts a
JOIN (
   SELECT MAX(id) AS lastid, boardid
   FROM posts
   WHERE is_deleted = 0
   GROUP BY boardid
) b ON a.id = b.lastid
AND a.boardid = b.boardid
JOIN boards c ON a.boardid = c.id

输出看起来像这样:

board   id  parentid    message     name    timestamp
=====================================================
board1  123 5           text        text    464587
board2  43  7           text        text    464885
board3  74  34          text        text    463488

这是我追求的结果:

board   id  parentid    message     name    timestamp
=====================================================
board1  123 5           text        text    464587
board1  456 134         text        text    464657
board1  345 234         text        text    494587
board2  43  7           text        text    464885
board2  44  7           text        text    474885
board2  45  7           text        text    454885
board3  74  34          text        text    463488
board3  75  34          text        text    463499
board3  236 39          text        text    465677

有两种方法:

1)使用TOP()子句-http : //technet.microsoft.com/zh-cn/library/ms189463.aspx

2)使用排名功能 -http://technet.microsoft.com/zh-CN/library/ms189798.aspx

1)

SELECT TOP(3) Field1, Field2, ..., FieldN
FROM TableName

2)

SELECT Field1, Field2, ..., FieldN
FROM (
    SELECT  ROW_NUMBER() OVER(ORDER BY Field1) AS RowNo, Field1, Field2, ..., FieldN
    FROM TableName
) AS T
WHERE T.RowNo IN (1,2,3)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM