1

给定以下数据集示例,我应该如何构造我的SQL查询,以确定查询中的特定时间范围是否value逐渐user_id增长,方法是返回true/false结果

用户身份 日期 价值
1 2021 年 4 月 1 日 12:00 350
1 2021 年 4 月 2 日 12:00 400
1 2021 年 4 月 3 日 12:00 450
5 2021 年 4 月 4 日 12:00 560
5 2021 年 4 月 5 日 12:00 566
5 2021 年 4 月 6 日 12:00 483
5 2021 年 4 月 7 日 12:00 570

通过上面的例子,我们可以观察到,valueforuser_id=1日复一日地逐渐增长,而valueforuser_id=5连续 2 天增长,但在第三天反弹。

user_id=1因此,和的预期结果集user_id=5将是:

用户身份 value_is_increasing
1 真的

的预期结果集user_id=5将是:

用户身份 value_is_increasing
5 错误的

声明更新:我想确定该值是否在特定时间范围内以逐日方式(连续)不断增长。此外,单个值点应该被认为是嘈杂的(即使随着时间的推移它们呈上升或下降趋势,它们也会上下反弹)并影响结果。

4

1 回答 1

1

使用聚合:

SELECT user_id, 
       GROUP_CONCAT(value ORDER BY date) = GROUP_CONCAT(value ORDER BY value) value_is_increasing
FROM tablename
GROUP BY user_id
HAVING COUNT(*) > 1 
   AND COUNT(*) = COUNT(DISTINCT value)

该条件COUNT(*) > 1将仅返回表中值超过 1 个的用户。
该条件COUNT(*) = COUNT(DISTINCT value)将仅返回表中只有不同值的用户。
GROUP_CONCAT(value ORDER BY date)将返回值 order bydate并将
GROUP_CONCAT(value ORDER BY value)返回值 order by value
如果 2 的结果GROUP_CONCAT()相同,则意味着values 单调递增。

请参阅演示

于 2021-04-06T20:50:27.253 回答