我有一张如下表格
item_id position_number position_date
1 9 2013-06-29 15:12:58
2 7 2013-07-25 15:12:58
18 5 2013-07-08 12:07:00
13 9 2013-07-08 12:07:00
我想通过position_number获取项目组并按position_date DESC排序,因此查询将返回以下内容:
item_id position_number position_date
13 9 2013-07-08 12:07:00
2 7 2013-07-25 15:12:58
18 5 2013-07-08 12:07:00
我一直在实施一些使用DISTINCT和GROUP BY的解决方案,但没有得到理想的结果。
有没有人知道如何解决它?
答案 0 :(得分:3)
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT position_number, MAX(position_date) position_date
FROM tableName
GROUP BY position_number
) b ON a.position_number = b.position_number AND
a.position_date = b.position_date
ORDER BY a.position_number DESC
答案 1 :(得分:3)
根据您的示例数据,此查询将返回指定的结果集:
SELECT t.item_id
, t.position_number
, t.position_date
FROM ( SELECT MAX(n.item_id) AS max_item_id
FROM mytable n
GROUP BY position_number
) m
JOIN mytable t
ON t.item_id = m.max_item_id
ORDER BY t.position_number DESC
注意这是为每个position_number选择一个item_id
。这假设给定的item_id只出现一次,并且只有一个position_number。 (如果item_id可以与多个postion_number相关联,则可以调整查询。这是使用MAX()
函数来选择具有最大值的item_id
。(排除的行的唯一示例是ITEM_ID = 1。)
答案 2 :(得分:2)
试试这个
从your_table组中选择*按position_number顺序按position_date DESC
编辑:
SELECT `item_id`, max(`position_number`) position_number , max(`position_date`) position_date FROM TABLENAME
GROUP BY POSITION_NUMBER
ORDER BY POSITION_DATE DESC
答案 3 :(得分:0)
SELECT * FROM TABLE_NAME
GROUP BY POSITION_NUMBER
ORDER BY POSITION_DATE DESC
答案 4 :(得分:0)
试试这段代码:
SELECT * FROM TABLE_NAME GROUP BY POSITION_NUMBER ORDER BY POSITION_DATE DESC
答案 5 :(得分:0)
使用GROUP_BY和MIN或MAX来决定要用于排序的组中的哪个日期。
SELECT * FROM my_table GROUP BY position_number ORDER BY MAX(position_date) DESC;