sql在查询中选择最大日期
Posted
技术标签:
【中文标题】sql在查询中选择最大日期【英文标题】:sql select max date in a query 【发布时间】:2018-03-20 15:28:06 【问题描述】:我有这样的查询
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) 编辑您的问题并提供示例数据和所需结果。 (2) 学习使用正确、明确的JOIN
语法。 从不在FROM
子句中使用逗号。 (3) 用您正在使用的数据库标记您的问题。
你好。很抱歉,但我的查询更加复杂和冗长,这就是为什么我只是举一个简单的例子。我修改我的查询并编辑我的问题
在回答完问题后更改问题是不礼貌的。问另一个问题要好得多。更改问题可能(在这种情况下确实如此)会使答案无效,从而导致投票失败。
【参考方案1】:
你可以使用max
:
select nom, prenom, max(date_empl)
from your_table
where your_condition
group by nom, prenom
【讨论】:
好收获! :) 在这种情况下,他/她可能需要在 group by 子句中添加 id 但这不是问题;)【参考方案2】:你可以使用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
【讨论】:
【参考方案3】:这回答了问题的原始版本。
这假设您的意思是您为相同的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;
【讨论】:
有一个小缺陷,但这不是你的错,因为列名是用法语命名的:nom 和 prenom 表示 LastName i> 和 FirstName,因此这将导致将潜在的同音词组合在一起。最好在这里GROUP BY p.id, p.nom, p.prenom
以上是关于sql在查询中选择最大日期的主要内容,如果未能解决你的问题,请参考以下文章