簡體   English   中英

選擇某一列的前 n 個值不同的行

[英]Select rows where top n values of a certain column are distinct

我想知道是否有可能以一種簡單有效的方式在 MySQL 中做到這一點。 我想在我的例子中做的是:

我有一個表,我在其中存儲帶有 FK 的博客文本到其他博客信息(標題、用戶等)。 博客文本可以存儲在多行(如果它是一個非常長的文本)。 如果有多行,每一行都有一個序列號來知道文本的順序。

有什么簡單的方法可以讓我通過一個查詢選擇從最高 FK 編號 (postid)(也將是最新添加的)開始的行,並將響應的限制設置為 10 個不同的 FK 值。 需要明確的是,我不想將行數限制設置為 10,而只想將不同 postid 值的限制設置為。

例如,如果我有下表:

+----------+--------+-----------+
| sequence | postid |   text    |
+----------+--------+-----------+
|    1     |   50   | 'Bla bla' |
|    1     |   51   | 'Bla bla' |
|    1     |   52   | 'Bla bla' | (1)  <-- From here (52 to 61 is 10 different postids)
|    2     |   52   | 'Bla bla' | (2)
|    1     |   53   | 'Bla bla' | (3)
|    2     |   53   | 'Bla bla' | (4)
|    1     |   54   | 'Bla bla' | (5)
|    1     |   54   | 'Bla bla' | (6)
|    1     |   56   | 'Bla bla' | (7)
|    1     |   57   | 'Bla bla' | (8)
|    1     |   58   | 'Bla bla' | (9)
|    1     |   59   | 'Bla bla' | (10)
|    1     |   60   | 'Bla bla' | (11)
|    1     |   61   | 'Bla bla' | (12)  <-- To here
+----------+--------+-----------+

這里我想要底部 12 行,因為它們的 postid 從 61 到 52(包括 52),即 10。括號中的數字只是為了說明我想選擇多少行。

我希望這不會太令人困惑:) 那么有沒有簡單有效的方法來做到這一點?

SELECT * 
FROM mytable a 
INNER JOIN  ( SELECT DISTINCT(postid) postid 
              FROM mytable  
              ORDER BY postid DESC LIMIT 10) b  
ON a.postid = b.postid

在以下查詢中,I INNER JOIN您的主表到一個臨時表,該表獲得(最多)10 個最高postid值。 這允許您僅保留原始表中具有 10 個最高postid值之一的記錄。 想要的記錄將被過濾掉,因為它們不會與臨時表中的任何內容匹配。

SELECT t1.sequence, t1.postid, t1.text
FROM table t1 INNER JOIN
(
    SELECT DISTINCT postid
    FROM table
    ORDER BY postid DESC
    LIMIT 10
) t2
ON t1.postid = t2.postid

暫無
暫無

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

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