Sql 日期值更改时如何重新启动位置?
我有一张表,上面有我的产品的销售数量,我想按天获得销售数量的订单。问题是我的实际要求我只有总职位。我希望该职位在每次日期变化时从1开始 我需要一个更大的查询,以确定对产品的需求Sql 日期值更改时如何重新启动位置?,sql,phpmyadmin,Sql,Phpmyadmin,我有一张表,上面有我的产品的销售数量,我想按天获得销售数量的订单。问题是我的实际要求我只有总职位。我希望该职位在每次日期变化时从1开始 我需要一个更大的查询,以确定对产品的需求 SELECT (@pos := @pos+1) pos,`sale_qty`, Date, post_id FROM `sale_qty` S, (SELECT @pos := 0) p ORDER BY `Date`ASC ,`sale_qty` ASC 这就是我所拥有的: pos | sale_qty
SELECT (@pos := @pos+1) pos,`sale_qty`, Date, post_id
FROM `sale_qty` S, (SELECT @pos := 0) p
ORDER BY `Date`ASC ,`sale_qty` ASC
这就是我所拥有的:
pos | sale_qty | Date | post_id
--------|----------|------------|--------
1 | 0 | 2019-01-28 | 25077
2 | 15 | 2019-01-28 | 25479
3 | 0 | 2019-01-29 | 2077
4 | 8 | 2019-01-29 | 25923
5 | 13 | 2019-01-29 | 25892
6 | 2 | 2019-01-30 | 2910
我想要的是:
pos | sale_qty | Date | post_id
--------|----------|------------|--------
1 | 0 | 2019-01-28 | 25077
2 | 15 | 2019-01-28 | 25479
1 | 0 | 2019-01-29 | 2077
2 | 8 | 2019-01-29 | 25923
3 | 13 | 2019-01-29 | 25892
1 | 2 | 2019-01-30 | 2910
您可以使用变量,但需要记住
日期
值:
SELECT (@pos := if(@d = date, @pos + 1,
if(@d := date, 1, 1)
)
) as pos,
`sale_qty`, Date, post_id
FROM (SELECT s.*
FROM `sale_qty` s
ORDER BY `Date`ASC, `sale_qty` ASC
) s CROSS JOIN
(SELECT @d := '', @pos := 0) p ;
或者更简单地说,在MySQL 8+中
SELECT row_number() over (partition by date order by sale_qty) as pos
非常感谢你!看起来不错,但我没有MYSQL 8+,我也不知道如何记住日期值,你能给我解释一下吗?@BaptisteBoisset。第一个解决方案应该适用于任何版本的MySQL。更简单的解决方案是MySQL 8+。当两个日期都在同一页上时,它可以工作,但是如果我从第1页转到第2页,位置也会重置,没有日期change@BaptisteBoisset . . . 此查询中没有任何内容正在进行分页。它只是根据您指定的规则设置pos的值。