Lon*_*don 20 mysql sql postgresql hibernate
我有一些值在我的表中重复,我想只选择那些具有最新/最高日期的值,即:
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"
Run Code Online (Sandbox Code Playgroud)
我想选择这些:
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"
Run Code Online (Sandbox Code Playgroud)
这是我需要的简化版本,我的表有大约20列,所以我想选择*,如果不是我可以逐个选择.
所以我想选择*FRUIT类型的行,但只选择那些具有最高日期的行.谢谢
IAm*_*rey 34
这应该给你你想要的:
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
Run Code Online (Sandbox Code Playgroud)
基本上,它会找到每种水果的最新日期,然后显示每个水果的行信息(加入日期和水果名称).确保将日期字段和名称字段都编入索引.
如果您可以假设具有最高ID的项目也将是具有最高日期的项目(典型但在所有情况下不一定都是真的 - 这取决于您的用例),您可以MAX(ID)
代替MAX(Date)
并利用仅通过链接该ID而不是按日期和名称链接.
Jas*_*all 11
如果您使用的是mysql,那么将订购SELECT所有类型的"水果",并将订购从最旧到最新的日期:
SELECT * FROM tablename WHERE Type='fruit' ORDER by Date ASC
Run Code Online (Sandbox Code Playgroud)
如果需要,你可以对它进行限制(这将限制为最老的5):
SELECT * FROM tablename WHERE Type='fruit' ORDER by Date ASC LIMIT 5
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26827 次 |
最近记录: |