0

我有一张如下表

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 和 order by 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 的解决方案,但没有得到想要的结果。

有谁知道如何解决它?

4

6 回答 6

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
于 2013-07-29T19:46:14.653 回答
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。)

于 2013-07-29T19:47:16.713 回答
2

尝试这个

select * from your_table group by position_number order by 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

演示

于 2013-07-29T19:45:19.970 回答
0

这是SQLFiddle

SELECT * FROM TABLE_NAME
    GROUP BY POSITION_NUMBER 
    ORDER BY POSITION_DATE DESC
于 2013-07-29T19:46:53.540 回答
0

试试这个代码:

SELECT * FROM TABLE_NAME GROUP BY POSITION_NUMBER ORDER BY POSITION_DATE DESC
于 2013-07-29T19:47:25.047 回答
0

使用 GROUP_BY 和 MIN 或 MAX 来决定要使用组中的哪个日期进行排序。

SELECT * FROM my_table GROUP BY position_number ORDER BY MAX(position_date) DESC;
于 2013-07-29T19:51:47.853 回答