在这种情况下,我需要找到两行日期字段之间经过的天数。需要进行计算的行没有排序。
这是桌子的结构

Folio   DATE

1       6/1/2015
2       4/1/2015
1       3/1/2015
4       2/1/2015
1       1/1/2015

基本上,我需要按日期排序,只保留按对开本分组的最后两个事务。因此,在本例中,2015年1月1日对开本1的交易将被忽略。
假设我需要执行以下操作:
1。按对开本编号分组
2。仅按对开本计算最后两次交易之间的天数。例如,对开本1只包括2015年1月6日和2015年1月3日的交易。
我要找的结果是:
Folio   FirstDATE   LastDate   #ofDays

1       3/1/2015     6/1/2015    90

有MySQL的专业人士吗?我的技术还处于新手阶段。谢谢您!
更新:
我已经想出了以下办法:
SELECT
  SubQuery.`Folio Number`,
  SubQuery.LatestClosing,
  SubQuery.FirstClosing,
  DATEDIFF(SubQuery.LatestClosing, SubQuery.FirstClosing) AS numofdays
FROM (SELECT
    Subquery.`Folio Number`,
    SubQuery.LatestClosing,
    SubQuery.FirstClosing
  FROM (SELECT t.`Folio Number`,
      MAX(t.`Closing Date`) AS LatestClosing,
      (SELECT
          s.`Closing Date`
        FROM MLSFinalimport s
        WHERE t.`Folio Number` = s.`Folio Number`
        ORDER BY s.`Closing Date` DESC
        LIMIT 1, 1) AS FirstClosing,
    FROM MLSFinalimport t
    GROUP BY t.`Folio Number`) SubQuery) SubQuery

这将生成如下结果:
LatestClosing     First Closing   numofdays
7/20/2016         5/9/2006         3725

这就是我需要的。然而,我一直试图为每一行添加名为“对开本编号”的原始列。我该怎么做?
非常感谢你。

最佳答案

MySQL的专业人士?可能正好相反。mysql不支持窗口函数,因此您可以尝试使用与LIMIT/OFFSET相关的查询:

SELECT p.folio,p.max_d,p.second_d,DATEDIFF(p.max_d,p.second_d) as NumOfDays
FROM (
    SELECT t.folio,MAX(t.date) as max_d,
           (SELECT s.date FROM YourTable s
            WHERE t.folio = s.folio
            ORDER BY s.date DESC
            LIMIT 1,1) as second_d
    FROM YourTable t
    GROUP BY t.folio) p

10-01 04:45
查看更多