Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 日期值更改时如何重新启动位置?_Sql_Phpmyadmin - Fatal编程技术网

Sql 日期值更改时如何重新启动位置?

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

我有一张表,上面有我的产品的销售数量,我想按天获得销售数量的订单。问题是我的实际要求我只有总职位。我希望该职位在每次日期变化时从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 |    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的值。