Sql 如何根据变量字段值选择行中的一个元组

Sql 如何根据变量字段值选择行中的一个元组,sql,postgresql,Sql,Postgresql,我对SQL非常陌生,我想使用SELECT语句仅检索基于列值的集合的第一行。我将用一个表格示例来说明这一点。 以下是我的表格数据: chip_id | sample_id ------------------- 1 | 45 1 | 55 1 | 5986 2 | 453 2 | 12 3 | 4567 3 | 9 我想要一个SELECT语句,它获取第一行chip\u id=1,2,3 像这样: chip_id

我对SQL非常陌生,我想使用
SELECT
语句仅检索基于列值的集合的第一行。我将用一个表格示例来说明这一点。
以下是我的表格数据:

chip_id | sample_id
-------------------
1       | 45
1       | 55
1       | 5986
2       | 453
2       | 12
3       | 4567
3       | 9
我想要一个
SELECT
语句,它获取第一行
chip\u id=1,2,3

像这样:

chip_id | sample_id
-------------------
1       | 45 or 55 or whatever
2       | 12 or 453 ...
3       | 9 or ...
我该怎么做?

谢谢

您可以使用
行编号()获得一个值。

这将返回一个随机值。在SQL中,表本质上是无序的,因此没有“第一”的概念。您需要一个自动递增的id或创建日期,或者通过某种方式定义“first”来获取“first”


如果您有这样一个列,则用该列替换
rand()

如果我理解您的输出,如果您使用的是PostGreSQL 9,则可以使用以下内容:

SELECT chip_id , 
       string_agg(sample_id, ' or ')
FROM your_table
GROUP BY chip_id 

您需要使用查询对数据进行分组。
分组时,通常需要最大值、最小值或其他一些值来表示组。你可以做加法,计数,各种分组运算

对于您的示例,您似乎不需要特定的组操作,因此查询可以像下面这样简单:

SELECT chip_id, MAX(sample_id)
FROM table
GROUP BY chip_id
通过这种方式,您可以检索每个
芯片id
的最大
样本id
,我可能会:

set a variable =0
order your table by chip_id
read the table in row by row
if table[row]>variable, store the table[row] in a result array,increment variable
loop till done
return your result array

尽管取决于数据库、查询和版本,您可能会得到不可预测/不可靠的返回

你能澄清一下你所说的
45或55或任何东西是什么意思吗?
?如果你对样本id不感兴趣,那么你就不能简单地区分芯片id吗?@Andomar:45或55或任何东西,指的是芯片id=1的任何样本id值,因为
rand()
每次查询都要计算一次(比如
getdate()
)这实际上不会返回随机行。请改为尝试按newid()排序。@All:找到了,实际上很简单:谢谢Scori0,它正是我想要的:)
set a variable =0
order your table by chip_id
read the table in row by row
if table[row]>variable, store the table[row] in a result array,increment variable
loop till done
return your result array