回答

收藏

如何将减法插入每两行后的行中并插入新列?

技术问答 技术问答 109 人阅读 | 0 人回复 | 2023-09-13

我有一个关于在sql编写查询问题。
* z. C  T) q) k, a图1中,我想从第一行减去第二行(以列日期为准),并将结果插入标题Recency的新列的row1.然后从第二列减去第三列,插入新列的第二列,等等。
2 G' L( h( @2 e/ v2 I" Y! a事实上,我想计算每个用户活动的新近度。例如,在下图中,我为用户(手动)计算了这一点;我想通过sql编写查询,为所有用户执行此操作。. K$ _- b. Z2 a
.................................................... h: M# D0 B* I& P$ {4 U$ J
.........................................................! K2 F/ R! {4 `% B; a% v% e& [
还有其他问题:
- b- C9 k' |. u& t6 X& E3 m我还想计算每个用户在当前日期前的活动频率。我想计算每行的频率。例如,对于这个例子,对于abkqz用户,我们有:
9 F: p/ P. I4 @* o- ^  t8 C8 k2 Quser name     frequencyabkqz       abkqz       abkqz        abkqz       abkqz                                               
- L/ Z# n6 T* N& w& Y: J    解决方案:                                                               
3 Q% ]  A7 S) Y) Q1 X) ]2 o0 I                                                                假设下表结构1 ]2 B: z2 a3 t% t
CREATE TABLE [15853354] -- Stack Overflow question number(    [user-name] VARCHAR(20),   [submissions] INT,   [date] DATE,   [score] NUMERIC   [points] NUMERIC(9,1))INSERT [15853354]VALUES abkqz',5,'12 JUL 2010',83.91,112.5),  abkqz',5,'9 JUN 2010',77.27,0),   ('abkqz',5,'17 MAY 2010',91.87,315)然后,您可以编写以下查询! _6 M+ N7 X7 h6 ?6 I- I1 H) I
;WITH [cte15853354] AS(    SELECT         [user-name],       [submissions],       [date],       [score],       [points],       ROW_NUMBER() OVER (ORDER BY [user-name],[date] DESC) AS [ROWNUMBER]    FROM [15853354])SELECT     t.[user-name],   t.[submissions],   DATEDIFF(DAY,ISNULL([t-1].[date],t.[date]),t.[date]) AS [recency],   t.[score],   t.[points]FROM [cte15853354] tLEFT JOIN [cte15853354] [t-1]    ON [t-1].[user-name] = t.[user-name]    AND [t-1].[ROWNUMBER] = t.[ROWNUMBER]   1使用公共表达式计算行号,然后执行自连接,将每行与下行连接,然后计算日期差。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则