我有一个叫做交易的表。我希望能够测量cmnt_cre_dates之间的天数。
表格如下所示
pt_id name trans_cmnt pt_loc last_bl_date cmnt_cre_date
94578 RAMIREZ , JOHN Trans 130 S 1/8/2015 1/8/2015
94578 RAMIREZ , JOHN Trans 146 S 1/8/2015 1/9/2015
94578 RAMIREZ , JOHN Trans 380 S 1/8/2015 1/13/2015
94578 RAMIREZ , JOHN Trans 344 S 1/8/2015 1/15/2015
54678 KIFLE ,LOLA Trans 146 S 1/16/2015 1/16/2015
54678 KIFLE ,LOLA Trans 230 S 1/16/2015 1/16/2015
12547 WEISS ,Jenny Trans 230 S 1/26/2015 1/26/2015
12711 FARRELL ,DIVINA Trans 230 S 1/14/2015 1/14/2015
12711 JOHNS ,NATIVIDAD Trans 230 S 1/23/2015 1/13/2015
12711 JOHNS ,NATIVIDAD Trans 230 S 1/23/2015 1/23/2015
我希望桌子看起来像这样:
pt_id name trans_cmnt pt_loc last_bl_date cmnt_cre_date diff_days
94578 RAMIREZ , JOHN Trans 130 S 1/8/2015 1/8/2015 0
94578 RAMIREZ , JOHN Trans 146 S 1/8/2015 1/9/2015 1
94578 RAMIREZ , JOHN Trans 380 S 1/8/2015 1/13/2015 4
94578 RAMIREZ , JOHN Trans 344 S 1/8/2015 1/15/2015 2
54678 KIFLE ,LOLA Trans 146 S 1/16/2015 1/16/2015 0
54678 KIFLE ,LOLA Trans 230 S 1/16/2015 1/16/2015 0
12547 WEISS ,Jenny Trans 230 S 1/26/2015 1/26/2015 0
12711 FARRELL ,DIVINA Trans 230 S 1/14/2015 1/14/2015 0
12711 JOHNS ,NATIVIDAD Trans 230 S 1/23/2015 1/13/2015 0
12711 JOHNS ,NATIVIDAD Trans 230 S 1/23/2015 1/23/2015 10
我如何在sql中执行此操作?
答案 0 :(得分:0)
如果我理解正确的话......
update your_table current set diff_days =
cmnt_cre_date - (select max(cmnt_cre_date) from your_table
where cmnt_cre_date < current.cmnt_cre_date
and name = current.name) ;
update your_table set diff_days = 0 where diff_days is null;
上面是postgres,因为你没有指定你正在使用哪个数据库。
答案 1 :(得分:0)
你可以一起工作
SELECT
T.pt_id
, T.name
, T.trans_cmnt
, T.pt_loc
, T.last_bl_date
, T.cmnt_cre_date
, ISNULL(DATEDIFF(day,
(SELECT MAX(cmnt_cre_date)
FROM Transactions
WHERE name = T.name AND cmnt_cre_date < T.cmnt_cre_date),
cmnt_cre_date),
0) diff_days
FROM Transactions T
;
请记住:如果您没有提供ORDER BY
条款,则不能依赖于按特定顺序返回的记录。
如果需要调整/进一步详细说明,请发表评论。