作者: Severine (赛非茵) 看板: Database
标题: Re: [SQL ] 算出每笔日期间隔
时间: Mon Jul 14 15:48:53 2014
=============================================================
文章修改 请pagedown到最下面
由於上篇是为了映证作法 所以找了范例资料来做~
後来实际上因为原篇推文提到的加上序号的做法 其实在我的资料不可行
所以试着把每笔资料改加上流水号的方法
SELECT row_number() OVER(ORDER BY MyDay ) AS ROWID, T1.MyDay
FROM Sheet as T1
WHERE class='1'
ORDER BY MyDay
这样会捞出
ROWID MyDay
1 2014/01/01
2 2014/01/04
3 2014/02/06
4 2014/02/12
现在我是希望能够针对 ROWID去做前後笔删除 请问该如何做呢?
谢谢~
我有尝试使用 LEFT JOIN Sheet AS T2 ON T1.ROWID = T2.ROWID +1
但是这样当然不成功,因为原本T2并没有ROWID的部分.想请问如何改善~?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.138.48.211
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Database/M.1405324136.A.DDA.html
※ 编辑: Severine (1.167.80.218), 07/14/2014 18:51:00
1F:→ Severine:现在觉得真是当初资料表没有设计好 把东西杂在一起才这麽 07/14 19:14
2F:→ Severine:麻烦,要用where捞出来.. 07/14 19:14
3F:→ Severine:然後导致IDENTITY会不连续 就很难处理.. :( 07/14 19:15
CREATE TABLE #Dates(
MyId INT IDENTITY (1,1),
TheDate Datetime)
INSERT INTO #dates(TheDate) VALUES('1 Sep 2007 10:00')
INSERT INTO #dates(TheDate) VALUES('2 Sep 2007 12:00')
INSERT INTO #dates(TheDate) VALUES('3 Sep 2007 17:00')
INSERT INTO #dates(TheDate) VALUES('8 Sep 2007 02:00')
INSERT INTO #dates(TheDate) VALUES('10 Sep 2007 11:00')
INSERT INTO #dates(TheDate) VALUES('13 Sep 2007 13:00')
SELECT row_number() OVER(ORDER BY TheDate) as SN ,
TheDate,
(
SELECT f.TheDate
FROM #dates f
WHERE F.MyID=d.MyID-1
) as ODay,
DATEDIFF(day,
(select
f.TheDate
FROM #dates f
WHERE F.MyID=d.MyID-1)
,TheDate) Diff
FROM #dates d
尝试这样写出来
会变成
流水号 新日期 前日期 差异
不过还是不知道要怎样把Where变成用流水号row_number()去运算..
※ 编辑: Severine (1.167.80.218), 07/14/2014 19:36:27
这篇是目前做到的解法,简单说是用view来达成
1.首先先create view,并加上row_number as SN
2.用LEFT JOIN Sheet AS T2 ON T1.SN = T2.SN +1
大致上是这样 结束...谢谢大家 ><
===========================================================
修改後如下
虽然做出来了但是和想像中差太多..
我希望在下面的表格中,where class = 1,然後算出这两笔差距的时间
原表格 修改一下 多一个栏位
ROW_Number MyDay Class
1 2014/01/01 1
2 2014/01/02 2
3 2014/01/03 1
4 2014/01/04 3
在RowID的方法去做DateDiff, 会每笔Row都相减 变成这样
ROW_Number MyDay Class DateDiff
1 2014/01/01 1 1 (上下两笔差距一天)
2 2014/01/02 2 1
3 2014/01/03 1 1
4 2014/01/04 3 1
所以目前朝向使用暂存资料表,筛选Class=1以後,加入流水号,再将暂存资料表读出来.
并做DateDiff.不然也想不到甚麽好主意了 ><
想不到看似简单的功能却这麽复杂..
※ 编辑: Severine (61.219.164.156), 07/17/2014 18:30:20