Mysql 在按添加日期排序时,最有效的方法是选择全部,并包含一个不同的列值

Mysql 在按添加日期排序时,最有效的方法是选择全部,并包含一个不同的列值,mysql,Mysql,我有自动更新的行。有时,行通过一个新的insert(一个几乎重复的行,其中一些列保持不变)进行更新,而其他列具有新值。我想拉最新的最新的行;所有的价值观。这是我得到的 SELECT * FROM (SELECT * FROM (SELECT * FROM entries WHERE dataset_id = xxx ORDER BY time_added DESC ) alias1 GRO

我有自动更新的行。有时,行通过一个新的insert(一个几乎重复的行,其中一些列保持不变)进行更新,而其他列具有新值。我想拉最新的最新的行;所有的价值观。这是我得到的

SELECT * FROM
   (SELECT * FROM 
       (SELECT * FROM entries 
                 WHERE dataset_id = xxx 
                 ORDER BY time_added DESC
       ) alias1 GROUP BY title
 ) alias2 ORDER BY timestamp
在此列表上反向工作:

选择1>根据最初创建但未添加的时间戳重新排列要显示的时间

选择2>过滤器选择3以选择不同的标题值最近的标题

选择3>实际执行的第一个查询。获取按添加的时间戳排序的数据集

有没有更有效的方法?我从中得到了严重的代码异味。

使用分组方式并加入:


您的方法使用一个MySQL扩展来分组方式,在选择列表中有不在分组方式中的列。这是为了显式地返回不确定的结果。不要使用记录在案的不起作用的功能,即使它们在某些情况下似乎不起作用。

值得一提的是,至少为每个标题和数据集id添加一个唯一的时间,以避免输出中出现重复行。谢谢Gordon。我只需要将标题添加到joinselect语句中,它就可以工作了。emax.title没有被选中,你看。谢谢
select e.*
from entries e join
     (select title, max(time_added) as maxta
      from entries e
      where dataset_id = xxx 
      group by title
     ) emax
     on emax.title = e.title and e.time_added = emax.maxta
where dataset_id = xxx
order by e.timestamp;