仅包含具有特定列值的第一个条目

Posted

技术标签:

【中文标题】仅包含具有特定列值的第一个条目【英文标题】:Include only the first entry with a certain column value 【发布时间】:2012-07-26 21:46:25 【问题描述】:

当使用SELECT * FROM myTable 时,我得到一个如下所示的列表:

A    473
A    234
B    752
C    136

但是,我不想让多行具有相同的字母。我只想获取带有某个字母的第一个条目,然后跳到下一个,如下所示:

A    473
B    752
C    136

现在,I know how to do this when I know what type of data I have。但是,我想编写一个不管表是什么样子都可以工作的 SQL 命令,也就是说,类似于:SELECT * FROM myTable WHERE duplicates of column1 are discarded

编辑:我真的不需要成为为每个唯一 column1 值选择的第一个条目。任何行都可以。

编辑 2:我非常希望该解决方案同时适用于字符串和数字。

【问题讨论】:

您使用的是什么数据库?您如何确定第一个值是什么? SQL 表没有内在的顺序。 我正在使用一个访问数据库,并且我正在通过 php 中的 odbc 访问它。关于排序,我真的不在乎选择哪一行。 【参考方案1】:

您可以使用某种聚合函数来获取您想要的 column2 的值。示例:

SELECT Column1, MAX(Column2)
FROM MyTable
GROUP BY Column1

您可以阅读各种聚合函数以及它们的作用here。该链接特定于 SQL Server,但同样的想法也适用于那里的许多 DBMS。

【讨论】:

如果 column2 中有字符串,是否可以使用 MAX?【参考方案2】:

您可以使用GROUP BYSELECT column1 FROM myTable GROUP BY column1 可以工作:

A
B
C

如果您需要 column2,则需要选择一个聚合函数,例如 MAXSELECT column1,MAX(column2) FROM myTable GROUP BY column1:

A    473
B    752
C    136

这将为myTable 中的每一行提供给定的column1 和最高的column2

【讨论】:

该问题专门要求序列中的第一个值。 就像您上面的评论所说,如果不了解该表的更多信息,我们不知道“第一个值”是什么意思。有 ID 列吗?从示例中,我假设 MAX 将是解释 GROUP BY 使用的一个很好的起点。 如果 column2 是字符串值,我还能使用 MAX() 还是必须使用其他东西? 好吧,当 column2 包含字符串时尝试这个,我得到零行,所以我猜 MAX() 不适合字符串值。 @Speldosa 如果你得到零行,还有其他一些问题。 Max 使用字符串。您应该发布一些示例数据【参考方案3】:

你可以使用函数“rownum”

例如:

select * from table_name where rownum < 2;

o/p:它将显示第一行条目。

【讨论】:

Access SQL中没有rownum函数。

以上是关于仅包含具有特定列值的第一个条目的主要内容,如果未能解决你的问题,请参考以下文章

用于获取表的所有条目并且仅包含基于特定列的许多重复项中的第一个的自定义查询

如何找到特定成员具有特定值的第一个结构?

将两个具有相似列值的数据框合并在一起[重复]

Jquery:在包含特定列值的行之后插入新行

如何按特定列值的前导整数对子数组进行排序?

如何选择具有 MAX(列值)的第一行?