我有下表。
ID Name State Date
1 A1 First 1/10/2013
2 A1 Second 1/11/2013
3 A1 Last 1/12/2013
4 A2 First 1/10/2013
5 A2 Closed 1/11/2013
6 A3 First 1/10/2012
7 A3 Second 1/10/2012
州的优先顺序如下
1 First
2 Second
3 Last
4 Closed
这意味着我必须只显示名称的最新状态(如果状态未关闭。如果状态关闭,我不必显示该ID)。
所以上表的输出应该是
ID Name State Date
3 A1 Last 1/12/2013
7 A3 Second 1/10/2012
我不知道该怎么办?我会尝试一些我已经知道但现在我正在努力的事情。我可以在php
中执行此操作并将输出存储在另一个table/view
中并显示它,但必须在数据库中完成。
由于
答案 0 :(得分:1)
假设您的ID
是自动增量的。
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT name, MAX(ID) max_ID
FROM tableName
GROUP BY Name
) b ON a.ID = b.max_ID AND
a.Name = b.Name
WHERE a.State <> 'Closed'
<击> 撞击>
<击>或列日期的数据类型为DATE
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT name, MAX(date) max_date
FROM tableName
GROUP BY Name
) b ON a.ID = b.max_date AND
a.Name = b.Name
WHERE a.State <> 'Closed'
击> <击> 撞击>
答案 1 :(得分:0)
我也有这样的解决方案,但我不确定我的是否更快。
SELECT * FROM
(SELECT id, name, state, date FROM myTable ORDER BY state DESC, id DESC) AS subQuery
WHERE state <> 'Closed' GROUP BY name
编辑:我试过这种方式,因为GROUP BY只返回第一个项目,而不是最后一个项目,因此首先命令它先放入你要查找的项目,然后对它们进行分组,你知道了!