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