1

我的数据库表中有 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。

4

2 回答 2

3

FIRST函数将在这里派上用场。

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

演示在这里

于 2013-10-23T06:42:55.473 回答
-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"
;
于 2013-10-23T06:36:27.280 回答