【问题标题】:Selecting rows with the highest date选择日期最高的行
【发布时间】:2011-08-26 01:06:13
【问题描述】:

我的表格中有一些重复的值,我只想选择那些日期最新/最高的值,即:

ID   Type     Name      Value        Date
--  -------   -----    -------       -------------
1   "FRUIT"  "APPLE"  "Imported"  "2011-03-19 22:08:13"
5   "FRUIT"  "LEMON"  "Imported"  "2011-03-19 22:00:44"
22  "FRUIT"  "PEACH"  "Imported"  "2011-03-20 11:03:13"
31  "FRUIT"  "MELON"  "Imported"  "2011-04-28 18:42:07"
44  "FRUIT"  "PEACH"  "Imported"  "2011-04-12 11:06:11"
98  "FRUIT"  "CHERRY" "Imported"  "2011-03-19 22:46:04"
211 "FRUIT"  "MELON"  "Imported"  "2011-03-19 22:25:24"
217 "VEG"    "SPINACH""Imported"  "2011-03-19 22:25:24"

我想选择这些:

ID   Type     Name      Value        Date
--  -------   -----    -------       -------------
1   "FRUIT"  "APPLE"  "Imported"  "2011-03-19 22:08:13"
5   "FRUIT"  "LEMON"  "Imported"  "2011-03-19 22:00:44"
31  "FRUIT"  "MELON"  "Imported"  "2011-04-28 18:42:07"
44  "FRUIT"  "PEACH"  "Imported"  "2011-04-12 11:06:11"
98  "FRUIT"  "CHERRY" "Imported"  "2011-03-19 22:46:04"

这是我需要的简化版,我的表大约有20列所以我想选择*,如果没有我可以一一选择。

所以我想选择 * 行类型 FRUIT 但只选择日期最高的那些。谢谢

【问题讨论】:

  • 我想我理解你,但你的解释有点模糊,下面有两种不同类型的答案。你想要每种水果中的一种,对吗?如果相同的水果被列出两次或更多,请获取最近的一个?

标签: mysql sql hibernate postgresql


【解决方案1】:

这应该会给你你想要的:

SELECT *
FROM Table
INNER JOIN 
(SELECT Name, MAX(Date) as TopDate
FROM Table
WHERE Type = 'FRUIT'
GROUP BY Name) AS EachItem ON 
    EachItem.TopDate = Table.Date 
    AND EachItem.Name = Table.Name

基本上,它会找到每种水果的最新日期,然后显示每个水果以及该行的信息(加入日期和水果名称)。确保 Date 字段和 Name 字段都被索引。

如果您可以假设 ID 最高的项目也是日期最高的项目(典型但不一定在所有情况下都正确 - 这取决于您的用例),您可以使用 MAX(ID) 而不是 @ 987654323@ 并利用仅按该 ID 链接而不是按日期和名称链接。

【讨论】:

    【解决方案2】:

    如果您使用的是 mysql,这将排序 SELECT 所有类型的“水果”,并将日期从最旧到最新排序:

     SELECT * FROM tablename WHERE Type='fruit' ORDER by Date ASC 
    

    如果需要,您也可以对其进行限制(这将限制为最旧的 5 个):

     SELECT * FROM tablename WHERE Type='fruit' ORDER by Date ASC LIMIT 5 
    

    【讨论】:

    • 更清洁的解决方案,至少对我而言。
    • 顺序应该是DESC而不是ASC
    猜你喜欢
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 2018-01-22
    • 2012-11-06
    • 1970-01-01
    相关资源
    最近更新 更多