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;

【讨论】:

有一个小缺陷,但这不是你的错,因为列名是用法语命名的:nomprenom 表示 LastName i> 和 FirstName,因此这将导致将潜在的同音词组合在一起。最好在这里GROUP BY p.id, p.nom, p.prenom

以上是关于sql在查询中选择最大日期的主要内容,如果未能解决你的问题,请参考以下文章

选择查询以连续查找最大日期

SQL为每个部门选择最大销售额的日期[重复]

在 SQL 查询中选择最新或最近的日期

Oracle SQL 查询为包含相同 ID 的行提取最大日期的数据

SQL选择具有最大和最小日期的行

SQL - 使用分组方式选择,从具有最大值(日期)的寄存器中获取数据