【问题标题】:How to find difference between two values in one column by cross referencing against values in another column如何通过交叉引用另一列中的值来查找一列中两个值之间的差异
【发布时间】:2012-03-24 10:45:59
【问题描述】:

我有一张如下所示的表格:

id | machine | date | status
----------------------------
1  | 1 | 01-01-2009 | New
1  | 1 | 01-01-2010 | Busted
1  | 2 | 01-01-2010 | New
1  | 1 | 01-01-2012 | Repaired

我需要知道每台机器的每个状态之间的日期差异,如果它是最近的状态并且该机器没有更新的状态,它需要显示列出的最后日期和当前日期之间的差异:

id | machine | date | status   | duration
---------------------------------------
1  | 1 | 01-01-2009 | New      | 1 year
1  | 1 | 01-01-2010 | Busted   | 2 years
1  | 2 | 01-01-2010 | New      | 2 years, 2 months, 5 days
1  | 1 | 01-01-2012 | Repaired | 2 months, 5 days

说实话,我不在乎新的持续时间列如何显示日期之间的距离。我尝试自己进行此查询,但失败了。

【问题讨论】:

  • 您必须在 MySQL 中执行此操作,还是可以使用 PHP、PERL、Ruby 等执行此操作?

标签: mysql sql date


【解决方案1】:

这将为您提供以天为单位的值 -

SELECT *, DATEDIFF(IFNULL((SELECT `date` FROM machine_status ms2 WHERE ms1.machine = ms2.machine AND ms1.`date` < ms2.`date` ORDER BY `date` ASC LIMIT 1), CURRENT_DATE), ms1.`date`)
FROM machine_status ms1;

【讨论】:

    【解决方案2】:

    我认为最简单的方法是获取每台机器的最后两条记录,然后比较代码中的日期(简单减法)以找出差异。

    我发现this article 描述了如何将 GROUP BY 与两个对象一起使用(只获取每台机器的最后两个)

    为了按日期排序,您可能需要更改存储日期的方式。通常使用 Unix 时间戳。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多