簡體   English   中英

選擇具有最大值列的行 - 在日期范圍內

[英]Select a row having a column with max value - On a date range

請原諒我發布類似的問題。 請考慮一下:

date                 value

18/5/2010, 1 pm        40
18/5/2010, 2 pm        20
18/5/2010, 3 pm        60
18/5/2010, 4 pm        30
18/5/2010, 5 pm        60
18/5/2010, 6 pm        25 
19/5/2010, 6 pm        300 
19/5/2010, 6 pm        450 
19/5/2010, 6 pm        375 
20/5/2010, 6 pm        250 
20/5/2010, 6 pm        310 

查詢是獲取每天的日期和值,使得當天獲得的值為max。 如果在該日重復最大值,則選擇最低時間戳。 結果應該是:

18/5/2010, 3 pm        60
19/5/2010, 6 pm        450
20/5/2010, 6 pm        310

查詢應該采用類似下面給出的日期范圍,並以上述方式查找該范圍的結果:

其中date> = to_date('26 / 03/2010','DD / MM / YYYY')和日期<to_date('27 / 03/2010','DD / MM / YYYY')

如果您提供CREATE TABLE和INSERT,則可以更輕松地提供經過測試的答案。

create table i (i_dt date, i_val number);

insert into i values (to_date('18/5/2010 1pm','dd/mm/yyyy hham'),        40);
insert into i values (to_date('18/5/2010 2pm','dd/mm/yyyy hham'),        20);
insert into i values (to_date('18/5/2010 3pm','dd/mm/yyyy hham'),        60);
insert into i values (to_date('18/5/2010 4pm','dd/mm/yyyy hham'),        30);
insert into i values (to_date('18/5/2010 5pm','dd/mm/yyyy hham'),        60);
insert into i values (to_date('18/5/2010 6pm','dd/mm/yyyy hham'),        25 );
insert into i values (to_date('19/5/2010 6pm','dd/mm/yyyy hham'),        300 );
insert into i values (to_date('19/5/2010 6pm','dd/mm/yyyy hham'),        450 );
insert into i values (to_date('19/5/2010 6pm','dd/mm/yyyy hham'),        375 );
insert into i values (to_date('20/5/2010 6pm','dd/mm/yyyy hham'),        250 );
insert into i values (to_date('20/5/2010 6pm','dd/mm/yyyy hham'),        310 );

select i_dt, i_val from 
   (select i.*, rank() over (partition by trunc(i_dt) order by i_val desc, i_dt asc) rn 
   from i) 
where rn = 1;

您正在聚合數據,因此請使用分組和聚合功能。 您可以添加任何您想要的where子句,但我復制了您的where子句,更改日期以便選擇每個記錄。 借用Gary的創建表和插入語句:

SQL> select min(i_dt) keep (dense_rank last order by i_val) i_dt
  2       , max(i_val) i_val
  3    from i
  4   where i_dt >= to_date('26/03/2010','dd/mm/yyyy')
  5     and i_dt < to_date('27/05/2010','dd/mm/yyyy')
  6   group by trunc(i_dt)
  7  /

I_DT                     I_VAL
------------------- ----------
18-05-2010 15:00:00         60
19-05-2010 18:00:00        450
20-05-2010 18:00:00        310

3 rows selected.

問候,Rob。

我沒試過這個,但我覺得你想要的東西是這樣的:

select max(date)
from  table
where date >= to_date('26/03/2010','DD/MM/YYYY') AND date < to_date('27/03/2010','DD/MM/YYYY')
group by trunc(date)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM