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