Mysql订单项目最新的2个日期

时间:2010-07-16 12:46:49

标签: mysql sql-order-by

我有一个包含2个日期的表 - ADDDATE和UPDATEDATE 添加项目时,ADDDATE是当前日期,UPDATEDATE是0000-00-00。

我需要ORDER BY SQL命令并获得那些2的最佳日期 例如,如果ADD = 12/1/2010且UPDATE = 30/6/2010, 更新日期最好(最新)。

有什么建议吗?

3 个答案:

答案 0 :(得分:22)

使用GREATEST查找最新日期:

ORDER BY GREATEST(UPDATEDATE, ADDDATE)

答案 1 :(得分:10)

 ORDER BY IF(UPDATEDATE > ADDDATE, UPDATEDATE, ADDDATE)

答案 2 :(得分:7)

如果要使数据库可伸缩,最好的方法是添加一个新列LATESTDATE以及一个插入/更新触发器,该触发器将其设置为两个候选字段中的最新字段,例如, greatest

随着表格变大,在选择上运行的每行功能会非常快地减慢速度。如果你希望性能随着表的增长而保持可行,那么这种技巧就是常见的。

它在技术上违反了3NF,因为它复制了其中一个日期,但出于性能原因违规是正常的,并且您仍然维护ACID属性,因为触发器要求列保持一致。

我不知道我的头脑中的MySQL触发器语法(我自己就是DB2人员)但我会做以下事情:

  • 创建新列,将其设置为合适的默认值。
  • 创建插入/更新触发器以确保反映更改。
  • 使用update TBL set ADDDATE = ADDDATE等查询触摸所有行,以便触发所有当前行的触发。

此解决方案的优势在于它将计算成本移动到数据更改的时间,而不是每次查询数据库时。这会在所有读取中分摊成本,使其更有效率(除非您是那些非常罕见的野兽之一,其中表格的编写频率高于阅读时间。)

请记住,如果桌子的大小相对较小,则可能没有必要 - 我在桌子真正巨大的环境中工作。