使用聚合函数查询

时间:2013-10-23 06:28:01

标签: sql oracle oracle11g

我的数据库表中有3列,如下所示。 1. START_TIME 2. END_TIME 3. INDEX_NO

Sample records below

INDEX_NO                END_TIME                        START_TIME                      
------------- ------------------------------- -------------------------------
I152         13-JAN-14 02.30.00.000000000 AM 13-JAN-14 12.10.00.000000000 AM 
I151         13-JAN-14 05.30.00.000000000 AM 13-JAN-14 03.15.00.000000000 AM 
I152         20-JAN-14 02.30.00.000000000 AM 20-JAN-14 12.10.00.000000000 AM 
I151         20-JAN-14 05.30.00.000000000 AM 20-JAN-14 03.15.00.000000000 AM  

从上面的结果集中,我需要使用MIN(START_TIME)

提取MAX(END_TIME)INDEX_NO以及记录的MIN(START_TIME)
To summarize the expected output is as follows.

INDEX_NO                END_TIME                        START_TIME                      
    ------------- ------------------------------- -------------------------------
    I152         20-JAN-14 05.30.00.000000000 AM 13-JAN-14 12.10.00.000000000 AM 

任何人都可以帮我查询最低成本吗?

我正在使用oracle 11g。

2 个答案:

答案 0 :(得分:3)

FIRST功能在这里会派上用场。

select min(index_no) keep(dense_rank first order by start_time),
       max(end_time),
       min(start_time)
from mytab;

演示here

答案 1 :(得分:-1)

首先编写内部查询,查找最小时间和最长时间。然后编写一个从表中选择正确字段的查询,使用min_time字段将其与内部查询连接。

如果有多行具有相同的最小开始时间,则会产生多行。

SELECT 
    mt.INDEX_NO,
    mt.START_TIME,
    t."max_time"
FROM MyTable mt
JOIN
(
SELECT
    min(START_TIME) as "min_time",
    max(END_TIME) as "max_time"
FROM MyTable
) t
ON mt.START_TIME = t."min_time"
;