簡體   English   中英

不使用MAX函數獲取最新日期…Oracle SQL

[英]Get the most recent date without the MAX function… Oracle SQL

在現實世界中絕對沒有任何另一項學術任務……這是我要做的:

•使用帶有參數的明確游標,該參數接受汽車注冊,以查找有關汽車的最新預訂。 您將不得不在此處查看I_BOOKING表中的date_reserved列。 您不能使用MAX函數。 比較所有相關日期以找到最新日期。

老實說,我不知道如何在MAX(或其他)函數之外執行此操作。

到目前為止,我有這個:

CURSOR reg_cr (registration VARCHAR2) IS
SELECT GREATEST (date_reserved)
FROM i_booking;
v_reg reg_cr%ROWTYPE;

如果有人能指出正確的方向,我將不勝感激。

兩種僅返回一條記錄的方法:

SELECT date_reserved
FROM   (SELECT * FROM i_booking
        ORDER BY date_reserved DESC)
WHERE  ROWNUM = 1;

SELECT DISTINCT
       FIRST_VALUE(date_reserved)
       OVER (ORDER BY date_reserved DESC)
FROM   i_booking;

SELECT date_reserved
FROM   (SELECT date_reserved
              ,ROW_NUMBER() OVER (ORDER BY date_reserved DESC)
               AS the_rn
        FROM   i_booking)
WHERE  the_rn = 1;

此方法可能返回多行(如果並列第一名):

SELECT date_reserved
FROM   (SELECT date_reserved
              ,RANK() OVER (ORDER BY date_reserved DESC)
               AS the_rank
        FROM   i_booking)
WHERE  the_rank = 1;

wildplasser的答案也顯示了此功能。

盡管賦值的措辭似乎並未明確排除使用其他內置函數,但在我看來,這種精神似乎是在尋找一種遍歷所有日期值的蠻力方法,尤其是從“比較所有相關日期”部分,盡管仍然不明確。 我想,這還取決於您已經學到了什么。

因此,這是我對作業的理解:

set serveroutput on
declare
  cursor reg_cur (registration i_booking.registration%type) is
    select date_reserved
    from i_booking
    where registration = reg_cur.registration;
  max_date date;
begin
  for reg_row in reg_cur('<reg value>') loop
    if max_date is null or reg_row.date_reserved > max_date then
      max_date := reg_row.date_reserved;
    end if;
  end loop;
  dbms_output.put_line('Most recent date is: ' || to_char(max_date, 'YYYY-MM-DD'));
end;
/

這樣可以跟蹤到目前為止所看到的最新日期,並在循環的每次迭代中檢查當前游標的值是否是最近的。 當然可怕的是,但是這似乎是您所期望的。

還不清楚您應該使用該值做什么; dbms_output也不適用於此處的任何現實世界,因此也許您想要一個函數; 這是函數形式的相同方法的SQL Fiddle

最大值表示:沒有對應的記錄,其值更高:

SELECT *
FROM orders oo                       -- all orders
WHERE NOT EXISTS (                   -- for which there does not exist
   SELECT * FROM orders nx           -- an order from
   WHERE nx.client_id = oo.client_id -- the same client
   AND nx.order_date > oo.order_date -- ,but with a more recent date
   ); 

暫無
暫無

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

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