2015-01-14 194 views
0

我想創建一個查詢,我只找到具有最早和最近registration_date的成員的詳細信息。到目前爲止,我有查找最小和最大日期SQL

SELECT member_id, UPPER(name), registration_date 
from db.member WHERE registration_date >= 
'2012-01-01' 

我不確定如何找到剛纔最小/最大,但我只是在設定日期的測試它2012-01-01

所以查詢應該只帶回兩個結果 - 分鐘/最大

預先感謝您

回答

1

你可以得到一個子查詢minmax日期,然後可以得到結果。

select member_id, upper(name), registration_date 
from db.member 
cross join (
     select min(registration_date) as minDate, max(registration_date) as maxDate 
     from db.member) t 
where registration_date in (t.minDate, t.maxDate) 

,或者你可以用in做到這一點,union

select member_id, upper(name), registration_date 
from db.member 
where registration_date in (
     select min(registration_date) 
     from db.member 
     union 
     select max(registration_date) as maxDate 
     from db.member) 
+0

在起飛的機會是最小和最大日期有/日期(根據您的列數據類型是什麼)多個相同的時間戳,你應該升序排序REGISTRATION_DATE您分鐘子查詢和搶前1,和最大子查詢,按registration_date降序排序,並抓取top 1以確保您不會獲得兩個以上的記錄。在子查詢中執行此操作,如果您在外部查詢中執行此操作,則可能會收到2分鐘或2秒的風險。 – gmiley

0

選擇分鐘從TBL(dateColumn),MAX(dateColumn);

0

類似於下面的內容,雖然有些子查詢很重,但可能會使您更接近您所需的內容。根據你的SQL的風格(Oracle,SQLServer,MySQL等),你可以限制IN結果集子查詢中的member_id選擇的子查詢。

select member_id, Upper(name) AS name, registration_date 
from db.member 
where member_id in 
(
    select Min(member_id) 
    from db.member 
    where registration_date = 
    (
     select Min(registration_date) 
     from db.member 
    ) 
    union all 
    select Max(member_id) 
    from db.member 
    where registration_date = 
    (
     select Max(registration_date) 
     from db.member 
    ) 
) 
order by registration_date desc;