我需要获取表的不同值,该表具有自动递增的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)
这似乎是一个好主意。
答案 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