sql在查询中选择最大日期

时间:2017-10-09 12:10:15

标签: sql inner-join greatest-n-per-group

我有这样的查询

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的lignes 如何只选择最大DATE_VALUE的行? 感谢

3 个答案:

答案 0 :(得分:0)

您可以使用max

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

答案 1 :(得分: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

答案 2 :(得分: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;