我正在尝试在一个时间范围内获得每个用户的最大值。日期范围由每个用户在单独的时间范围内以及之前的2周内首次出现来确定,即用户在10月首次出现的时间是2018-10-01,因此范围是从2018-09-18到2018-10-01在此范围内,我正在寻找一列的最大值。所有这些数据都来自同一张表。
示例:
+------------+------------+---------+
| Profile_ID | Date | Value |
+------------+------------+---------+
| 1 | 2018-10-05 | 100 |
| 2 | 2018-10-02 | 50 |
| 2 | 2018-10-04 | 78 |
| 2 | 2018-10-05 | 56 |
| 1 | 2018-10-08 | 110 |
| 1 | 2018-10-01 | 99 |
| 2 | 2018-09-30 | 88 |
| 1 | 2018-09-27 | 106 |
+------------+------------+---------+
我正在寻找10月1日之后(包括10月1日之后的第一次出现)之前两周的峰值VALUE。峰值将是USER 1的2018-10-01和用户2的2018-10-02。然后分别是106和88。
我尝试输入代码:
SELECT max(Value)
FROM table
WHERE Date BETWEEN (
SELECT (min(Date) - INTERVAL 2 week)
FROM table
WHERE stamp between '2018-10-01' AND '2018-10-25'
GROUP BY profile_id
)
AND
(
SELECT min(Date)
FROM table
WHERE stamp between '2018-10-01' AND '2018-10-25'
GROUP BY profile_id
)
我遇到错误:
语法错误:等于或接近“ 2”
但是我认为这只是我问题的开始。有人知道在每个时间段内找到每个profile_id最大值的最佳方法吗?
答案 0 :(得分:1)
如果我理解正确,则可以使用row_number()
和一些日期过滤:
select t.*
from (select t.*,
row_number() over (partition by profile_id order by date desc) as seqnum
from t
where date <= '2018-10-01'
) t
where seqnum = 1;