小编Tho*_*zer的帖子

棘手的SQL SELECT语句

在项目中选择数据时出现性能问题.

有一个包含3列的表:"id","time"和"group"

  • ID像往常一样只是唯一的ID.
  • 时间是条目的创建日期.
  • 该小组在那里将某些条目汇总在一起.

所以表数据可能如下所示:

ID | TIME      | GROUP
------------------------
1  | 20090805  | A
2  | 20090804  | A
3  | 20090804  | B
4  | 20090805  | B
5  | 20090803  | A
6  | 20090802  | B
Run Code Online (Sandbox Code Playgroud)

...等等.

现在的任务是在给定日期的每个组中选择"当前"条目(它们的ID).也就是说,对于每个组,查找给定日期的最新条目.

以下前提条件适用:

  • 我事先并不知道不同的群体 - 可能会有许多不同的群体随着时间而变化
  • 选择日期可以位于表格中条目的日期之间.然后我必须找到每组中最接近的一个.也就是说,TIME小于选择日期,但是该规则适用于组的最大值.

我目前所做的是一个多步骤过程,我想将其转换为单个SELECT语句:

  1. SELECT DISTINCT group FROM table 找到可用的组
  2. 对于1)中找到的每个组, SELECT * FROM table WHERE time<selectionDate AND group=loop ORDER BY time DESC
  3. 取2)中找到的每个结果的第一行

显然这不是最佳的.

如果一些更有经验的SQL专家可以帮助我找到将这些步骤放在一个语句中的解决方案,我将非常高兴.

谢谢!

sql database oracle postgresql plsql

2
推荐指数
2
解决办法
2250
查看次数

标签 统计

database ×1

oracle ×1

plsql ×1

postgresql ×1

sql ×1