仅包含具有特定列值的第一个条目
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 BY
。 SELECT column1 FROM myTable GROUP BY column1
可以工作:
A
B
C
如果您需要 column2,则需要选择一个聚合函数,例如 MAX
。 SELECT 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函数。以上是关于仅包含具有特定列值的第一个条目的主要内容,如果未能解决你的问题,请参考以下文章