知道为什么以下两个查询会产生相同的结果吗?根据我看到的所有参考资料,第一个甚至不应该起作用,但它确实有效。显然,如果不是故障,我更喜欢第一个,因为它是一个更简单且可能更快的查询。
SELECT *,MIN(ts) FROM tbl GROUP BY id;
SELECT *,ts FROM tbl a WHERE rowid IN
(SELECT rowid FROM tbl b WHERE a.id = b.id ORDER BY ts LIMIT 1);
下面是一些示例数据:
rowid id ts name
1 58 10 aaa
2 58 5 bbb
3 72 7 ccc
预期结果:
2 58 5 bbb 5
3 72 7 ccc 7
SQLFiddle here...
这保证从SQLite 3.7.11开始有效。
至于为什么:一些付费客户想要它......
这是有效的,因为某些不支持窗口函数的平台将此构造视为窗口函数 - 在SQL Server,Oracle和db2上,您必须编写
min(ts) over(order by ts)