2017-10-09 126 views
0

最大日我有這樣SQL SELECT查詢中

SELECT DISTINCT 
FND.ID_CON, 
SPRT.CODE, 
SPRT.NOM, 
SPRT.DATE_VALUE, 
COTPLACE.LIBELLE 
FROM 
FND, 
SPRT, 
CONTRACT, 
COTPLACE 
WHERE 
FND.code=SPRT.code 
and FND.cot_place=SPRT.cot_place 
and FND.cot_place=COTPLACE.cot_place(+) 
and FND.origine=SPRT.origine 
and FND.ID_CON=CONTRACT.ID_CON 
and FND.ORIGINE=CONTRACT.ORIGINE 
and SPRT.code = '12345678' 
and CONTRACT.ID_CON like '%ABC123%' 

查詢....

該查詢返回兩個法分不同DATE_VALUE 如何與最大DATE_VALUE只選擇行? 感謝

+1

(1)編輯您的問題並提供樣品數據和所需結果。 (2)學習使用正確的,明確的'JOIN'語法。 *從不*在'FROM'子句中使用逗號。 (3)用你正在使用的數據庫標記你的問題。 –

+0

你好。我很抱歉,但我的查詢更加複雜和漫長,這就是爲什麼我要說一個簡單的例子。我模塊化查詢並編輯我的問題 – user1717487

+0

在回答問題後更改問題是無禮的。提出另一個問題要好得多。改變一個問題可以(並且在這種情況下)使答案無效,反過來請求降低提示。 –

回答

0

您可以使用max

select nom, prenom, max(date_empl) 
from your_table 
where your_condition 
group by nom, prenom 
+0

好搭檔! :)在這種情況下,他/她可能需要在group by子句中添加id,但這不是問題;) – NikNik

0

您可以使用order by + LIMIT 1

select nom, prenom, date_empl 
from person, employ, enterprise 
where person.id= "test" 
and person.id= emploi.id 
and person.enterpriseName = enterprise.name 
order by date_empl DESC LIMIT 1 
0

這個答案的原始版本。

這裏假設你的意思是說你得到多個行的組合爲相同的nom/prenom。一個典型的方法是:

select p.nom, p.prenom, max(e.date_empl) 
from person p join 
    employ em 
    on p.id = em.id 
where p.id = 'test' 
group by p.nom, p.prenom; 

enterprise表似乎並不需要此查詢。

注:FROM子句中

  • 決不使用逗號。 始終使用使用正確的顯式JOIN語法。
  • 使用表名稱的縮寫表。
  • 始終限定列名(特別是在引用多個表的查詢中)。
    • 請勿使用不需要的表格。

如果你只是想一個返回行,你會用ORDER BY和限制結果的一些方式。 ANSI標準方法是:

select p.nom, p.prenom, e.date_empl 
from person p join 
    employ em 
    on p.id = em.id 
where p.id = 'test' 
order by e.date_empl desc 
fetch first 1 row only; 
+0

有一個litlle缺陷,但它不是你的錯,因爲列名以法語命名:_nom_和_prenom_表示_LastName_和_FirstName_,因此這將導致將可能的同音詞分組在一起。最好在這裏用'GROUP BY p.id,p.nom,p.prenom' –