mysql - 支持在同一个表中选择和更新,创建按日期排名

标签 mysql nested

Columns of the DB in the image

尊敬的所有人, 我将感谢您对以下查询的帮助: 目标:创建一个排名,以天为单位,哪家是最畅销的商店,即销量最多的商店,将是第1名,以此类推。 表中的字段为: 日期、商店、销售额、Rank_Sales_By_Date、 我想知道是否可以使用单个查询,或者使用哪种方法,我可以使用此信息更新列 Rank_Sales_By_Date,目前我有一个部分查询,用日期过滤('2017-02-19 '),但目标是确实如此,按日期排名,对于所有日期,我不是专家,因此我将感谢您对此提供的宝贵帮助。谢谢。然后,我的查询是,我需要按日期进行游览并更新Rank_sales 列中的信息:

更新在同一个表中,但我没有检测到合适的方法。

提前非常感谢您,

列,

Date, Store, Sales, Rank_Sales_By_Date
----  -----  -----  ------------------

最佳答案

我假设你有一个唯一的 key (日期,商店)。

我建议使用以下查询来解决您的问题(使用用户定义的变量):

set @LastDate= Null, @LastSales= NULL, @CurRange=NULL;
update Sale_Table
set Rank_Sales_By_Date= if(@LastDate<=>Date, 
                               if(Sales<=>@LastSales, 
                                     @CurRange, 
                                     @CurRange:=@CurRange+1),
                               @CurRange:=1 + cast((@LastDate:=`Date`) as DATE) - `date` + (@LastSales:=Sales) - Sales)
order by Date, Sales desc, Store;

我认为您不清楚最后一部分(cast((@LastDate:=Date) as DATE) -date+ (@LastSales :=销售)- 销售)。它的值始终为 0,但我使用它将字段 Date 的值分配给变量 @LastDate,并将 sales 的值分配给变量 @LastSales。

通过此查询,同一天销售额相同的两个商店将具有相同的范围。

关于mysql - 支持在同一个表中选择和更新,创建按日期排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42421289/

相关文章:

mysql - 在 MySQL 数据库中搜索以匹配字符串的最快方法是什么?

php - Codeigniter 3 上的 Mysqli 驱动程序不工作

php - 更改日期格式-PHP/SQL

android - (Android Volley) JSONObject 无法转换为 JSONArray

mysql - 使用 SQL 查询发送通知

sql - 如何选择 MySQL 中局部变量中保存的列?

wpf - 如何公开嵌套在 UserControl 中的控件的 DependencyProperty?

javascript - 搜索/过滤嵌套数组 Javascript/Lodash

java - 如何创建包含调用的构造函数的静态嵌套类的实例(在 Java 中)

c# - 使用 lambda 从嵌套列表中分离值