- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想避免在表格上进行子选择来比较两个时期以及趋势是否向下。
此选择获取一个周期内的百分比
SELECT user, (SUM(value1)/SUM(value2)) AS percentage1
FROM table
WHERE (date BETWEEN @start1 AND @end1)
GROUP BY user
ORDER BY 2
这个查询得到了我想要的结果,但效率不是很高,因为有超过 1 亿行。
SELECT t1.user, (SUM(t1.value1)/SUM(t1.value2)) AS percentage1,
(SELECT (SUM(t2.value1)/SUM(t2.value2)) AS percentage2
FROM table AS t2
WHERE t2.userID = t1.userID
AND (t2.date BETWEEN @start2 AND @end2)
)
FROM table AS t1
WHERE (t1.date BETWEEN @start1 AND @end1)
AND (SUM(t1.value1)/SUM(t1.value2)) < (SELECT (SUM(t2.value1)/SUM(t2.value2))
FROM table AS t2
WHERE t2.userID = t1.userID
AND (t2.date BETWEEN @start2 AND @end2)
)
GROUP BY t1.user
有更好的方法吗?一种解决方案可能是只设置一个日期期间,然后按月(日期)、年(日期)进行分组,并与上个月进行比较,而不是使用两个确切的日期。但是按月份和年份分组只会为每个用户提供几行,而我想避免这种情况。
只是想要一个像这样干净的结果:
Adam, 43%, 47%
Lisa, 22%, 25%
John, 18%, 34%
排除这样的行,因为趋势百分比较低
Bill, 24%, 18%
Nina, 84%, 56%
SQL-Server 2016 Enterprise 是数据库。
最佳答案
你可以试试这个。
SELECT G1.user, G1.percentage1, G2.percentage2
FROM
( SELECT t1.user, t1.userID
(SUM(t1.value1)/SUM(t1.value2)) AS percentage1,
FROM table AS t1
WHERE
(t1.date BETWEEN @start1 AND @end1)
GROUP BY t1.user, t1.userID
) AS G1
INNER JOIN (
SELECT t2.userID, (SUM(t2.value1)/SUM(t2.value2)) AS percentage2
FROM table AS t2
WHERE
(t2.date BETWEEN @start2 AND @end2)
GROUP BY t2.userID
) AS G2 ON G1.userID = G2.userID
WHERE
G1.percentage1 < G2.percentage2
但是如果您只想使用表格中的一项选择,那么您也可以尝试此操作。
DECLARE @start DATE
DECLARE @end DATE
SET @start = CASE WHEN @start1 < @start2 THEN @start1 ELSE @start2 END
SET @end = CASE WHEN @end1 > @end2 THEN @end1 ELSE @end2 END
SELECT * FROM (
SELECT t.userID,
SUM( CASE WHEN t.date BETWEEN @start1 AND @end1 THEN t.value1 END ) / SUM( CASE WHEN t.date BETWEEN @start1 AND @end1 THEN t.value2 END ) AS percentage1,
SUM( CASE WHEN t.date BETWEEN @start2 AND @end2 THEN t.value1 END ) / SUM( CASE WHEN t.date BETWEEN @start2 AND @end2 THEN t.value2 END ) AS percentage2,
FROM table AS t
WHERE
(t.date BETWEEN @start AND @end)
GROUP BY t.userID
) AS SQ WHERE percentage1 < percentage2
关于sql - T-SQL : SELECT posts where trend is downwards on two time periods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50498617/
我写了一个 mdx 脚本来显示 Internet Sales Amount 的周期增长,一切正常。我们正在使用一个界面,您可以在其中放置一个切片器,以便用户可以选择他感兴趣的 date.Calenda
我有一列数据,例如 '1971q1'、'1972q2' 等(年份后跟季度)当我这样做时: print(type(df.Quarterly)) 答案是系列 我需要的是将此列“转换”/转换为真正的 pd.
下面是我要处理的句子。它由前面以两个哈希值 (##2312435) 开头的 ID 以及其余文本组成。我需要一个正则表达式来查找其中包含单词 likely 的句子,并检索整个句子和 ID。 句子: ##
这两条线有什么区别? call apoc.periodic.iterate("MATCH (n:Nodes) return n", "DETACH DELETE n", {batchSize:1000
这个问题在这里已经有了答案: When does Thread.CurrentThread.Join() make sense? (6 个答案) 关闭 9 年前。 有人可以向我解释 Thread.S
我正在尝试用 java.time 替换 org.joda.time.Period。 我们在数据库中存储了以下值。 P1M, P1Y, P1D, PT1H, PT1M 只是解析这个值: Period m
我正在尝试解析 linux dig 的输出使用正则表达式在一次拍摄中执行多项操作。 假设我挖掘主机 mail.yahoo.com : /usr/bin/dig +nocomments +noquest
我正在尝试创建一个匹配以下内容的正则表达式: 一个或多个数字 允许在第一个数字后有 0 到 1 个句点 如果有句号 句点后需要 1 - 2 位数字 这是我目前使用的正则表达式,它并不适用于所有情况:
这是我的代码。我想绘制美国东部夏令时9:30-10点的最高点和最低点。我破解了这个代码,但我搞不清时间了。只有当我将其设置为0800-0900时才有效,这没有任何意义。如果我把它设置为0930-100
我正在制作一个仅用于学习目的的应用程序。我试图计算两个日期之间的差异 LocalDate today = LocalDate.now(); LocalDate localHoudbaarheid =
我正在使用 SEO 友好的 URL,我可以通过 ASP.NET 处理其中的大部分,通过将 aspnet_isapi.dll 映射到所有 URL。 (我在 IIS 中设置了一个处理程序映射,它对所有路径
我准备了以下数据 Timestamp Weighted Value SumVal Group 1 1600 800 1 2
为什么结果为periodBetween.Days和 substracted.Days不同的? 我可以看到一个 periodBetween.Months是 0 和 substracted.Months是
我有生日和第二个 LocalDate.now()我使用 Periof 打印这个 Period test = Period.between(dateofbirth,LocalDa
我使用 cocoa 在 Mac 上开发了一个应用程序。我需要将 cmd + period(.) 键盘事件作为我设计的命令来处理。但现在 cmd + period(.) 键盘事件没有像我预期的那样得到很
我有4000个观测值的数据,所以这是head(both): kön gdk age fbkurs pers stterm 1 man
我有一个包含特定类元素 vector 的类。主要思想是根据序列的一个周期(elems_)和周期数(nperiod_)生成元素的周期性序列,因此我不需要存储所有元素,而只需存储一个周期。 class P
我正在尝试添加句点“。”以及变量的后缀“-on”(下面第 4 行): function globalProducts(cat, self){ $("div.info").hide();
例如: requests.get() 是一个带有句点的函数。我如何制作自己的函数,例如: def foo(): return 'bar' 并像这样调用该函数: x.foo() 不是这样的: f
我尝试使用java.time.Period,结果与我手动计算的结果相差了三天。这里奇怪的是,当我将时间段分为两个时间段时,结果与我的手动计算相符。 第二种方法就像我手动计算周期一样。 我是不是漏掉了什
我是一名优秀的程序员,十分优秀!