我有一个包含多个USERid的表,我使用分区按用户id和日期排序。现在我想这样做:如果用户的第一个记录(即排名1的记录)在速度上有"100x",我为这个用户的所有记录创建一个"高"的列,否则为用户的所有记录创建一个"低"的列。我如何在mysql中做到这一点?
<表类>
USERid
。
。
速度
tbody><<tr> 1日期。 1 90 x 1日期。 2 15 x。 2 b 日期。 1 100 x 2 b 日期。 3 30 x 1 c 日期。 1 100 x 1 c 日期。 2 3 x。 表类>
test this:
SELECT t1.*,
CASE WHEN t2.userid
THEN 'high'
ELSE 'low'
END rating
FROM table t1
LEFT JOIN ( SELECT
FROM table t2
WHERE `rank` = 1
AND speed = '100x' ) t3 USING (userid);
或
SELECT t1.*,
CASE WHEN EXISTS ( SELECT NULL
FROM table t2
WHERE t1.userid = t2.userid
AND `rank` = 1
AND speed = '100x )
THEN 'high'
ELSE 'low'
END rating
FROM table t1;
您可以使用FIRST_VALUE()
窗口函数:
SELECT *,
CASE
WHEN FIRST_VALUE(speed) OVER (PARTITION BY USERid ORDER BY date) = '100x' -- or ORDER BY `rank`
THEN 'high'
ELSE 'low'
END rating
FROM tablename