为前n个不同的元素(两列或更多列)选择行

时间:2016-05-16 17:23:36

标签: mysql sql

给定以下数据集,我想选择在col1和col2上选择'n'之后的第一个和最后一个结果之间的行(所有列)。

pkey | col1 | col2 | day | Other columns...
1    | a    | 1    | 1   |
2    | b    | 2    | 1   |
3    | b    | 2    | 1   |
4    | c    | 3    | 1   |
5    | c    | 4    | 1   |
6    | a    | 5    | 2   |
7    | a    | 5    | 2   |
8    | b    | 6    | 2   |
9    | c    | 7    | 2   |
10   | c    | 8    | 2   |

对于n = 5,结果必须是:

pkey | col1 | col2 | day | Other columns...
1    | a    | 1    | 1   |
2    | b    | 2    | 1   |
3    | b    | 2    | 1   |
4    | c    | 3    | 1   |
5    | c    | 4    | 1   |
6    | a    | 5    | 2   |
7    | a    | 5    | 2   |

enter image description here

我正在尝试使用SELECT DISTINCT col1, col2 FROM sampletable作为基础但我无法访问其他列。怎么可以实现呢?

修改

更改说明以更清楚地了解我想要的内容 将第6行和第7行的col2从1更改为5以更接近我的实际数据。

3 个答案:

答案 0 :(得分:1)

SELECT a.*
FROM sampletable AS a
INNER JOIN (SELECT DISTINCT col1, col2 FROM sampletable LIMIT 5) AS b
ON a.col1 = b.col1 AND a.col2 = b.col2

答案 1 :(得分:0)

 public static void showAllFromKat(int ID){
        con = getInstance();
        if(con != null){
            Statement query;
            try{
                query = con.createStatement();
                String sql =
                        "SELECT * FROM learn_themen_db";
                ResultSet result = query.executeQuery(sql);
                while(result.next()){
                    int KatID = result.getInt("Kat_ID");
                    String DisplayName = result.getString("Display_Name");
                    if(KatID == ID){
                        System.out.println(DisplayName);
                        swing.addButton(DisplayName);
                    }

                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

使用此查询。

答案 2 :(得分:-1)

另一种不同的方式:

SELECT DISTINCT(CONCAT(col1, col2)) AS fgroup, pkey, day... FROM [table] GROUP BY fgroup LIMIT [LIMIT]

用表名替换[table]。

将[limit]替换为所需的限制。

替换" ..."通过您要列出的所有额外字段。