如何重写以下查询以避免使用aggegate函数,顺序为:
从my_table中选择id,其中flow ='REQ'和audit_time< ='04 -Jul-2014'group by(id)order by min(audit_time);
由于我有一个大型数据集,上述查询导致性能问题。 下面是一个示例数据:
pk | id | audit_time |流
1 | 1 | 2014年7月10日| REQ
2 | 1 | 05-Jul-2014 | REQ
3 | 2 | 03-Jul-2014 | REQ
4 | 2 | 2014年7月1日| RES
5 | 1 | 04-Jul-2014 | RES
在输出中,我希望按时间排序唯一的ID列表。
答案 0 :(得分:0)
您不需要按ID分组,因为ID将是唯一的(应该是),并且您不会加入任何表 然后你只需要通过audit_time订购它。而且,由于您没有按照顺序进行分组,所以不需要按顺序使用函数。
select id from my_table where flow='REQ' and audit_time <= '04-Jul-2014' order by audit_time;
如果您的ID不是唯一的,并且您希望按最小audit_time排序,那么您的查询是唯一的方式(IMO)。