在除一列之外的所有列上选择不同的行

时间:2013-11-07 13:42:35

标签: mysql sql database

我需要获取表的不同值,该表具有自动递增的id字段。我需要id来识别,但是当除了id之外所有值都相同时我不关心哪个id。

我想出了以下内容,这似乎有效。有没有更好的方法来做到这一点?

SELECT id, date_f, date_t, num_n, num_d, mn, is 
FROM t
GROUP BY date_f, date_t, num_n, num_d, mn, is

另一个问题是,如果查询多次执行,这总是会返回相同的ID吗?

编辑:

示例db:

id date_f date_t num_n num_d mn is
1   10      10      10  10   10 10
2   10      10      10  10   10 10
3   10      10      10  10   10 10

我想存储一个行的所有列。我不在乎id是1,2或3,只要下次执行查询时它是相同的(不添加/删除之间的任何行)。到目前为止,有两个答案建议使用min(id)这似乎是一个好主意。

3 个答案:

答案 0 :(得分:2)

如果你根本没有在结果集中使用id,那么上面的答案将完成这项工作。如果您出于任何目的在结果集中至少需要一个Id,那么您应该稍微改变您的陈述:

SELECT min(id), date_f, date_t, num_n, num_d, mn, is 
FROM t
GROUP BY date_f, date_t, num_n, num_d, mn, is

将返回与不同集匹配的第一个Id(如果你想要最后一个,则使用(Max)) - 尽管将数据添加到表中,这可能会随着时间的推移而改变。

答案 1 :(得分:1)

你拥有的基本上是正确的 - 我想补充一点,如果你想要id(身份),那么你需要添加一个聚合,如 -

SELECT min(id), date_f, date_t, num_n, num_d, mn, is 
FROM t
GROUP BY date_f, date_t, num_n, num_d, mn, is

这将确保您每次都获得第一个/同一个(除非它被删除)

答案 2 :(得分:0)

SELECT DISTINCT date_f,date_t,num_n,num_d,mn,is 从t