此表没有ID列。这就是我不知道如何比较它的原因。
需要检查预览行,其中Keyword
和Day
字段必须相同。如果没有预览行,则在Ranking
中放入1。
如果有预览行,则获取预览Ranking
并将其设为Ranking+1
并更新字段Ranking
。
开始表
Keyword Asin Day Ranking
test red 28923 1-1-2018
test red 98254 1-1-2018
test red 79845 1-1-2018
test green 154684 1-1-2018
test red 28923 2-1-2018
test red 98254 2-1-2018
test red 79845 2-1-2018
test green 154684 2-1-2018
结果表
Keyword Asin Day Ranking
test red 88923 1-1-2018 1
test red 98254 1-1-2018 2
test red 79845 1-1-2018 3
test green 154684 1-1-2018 1
test red 88923 2-1-2018 1
test red 98254 2-1-2018 2
test red 79845 2-1-2018 3
test green 154684 2-1-2018 1
我想我需要一个连接和嵌套查询。我不确定是否需要创作
像这样的虚拟ID
:
SET @ID=0;
Select *
FROM
SELECT @ID:=@ID+1 AS ranking, Keyword, Asin, Day, Ranking
FROM RankingT
;
修改:更改Asin
个数字
答案 0 :(得分:0)
注意:您指定的排名似乎取决于表格的原始顺序。但这没有意义,因为表格代表无序集合。
以下答案提供了解决方案,但排名略有不同。如果你想要一个基于你的订单,那么你需要一个指定排序的列(这可以插入到asin
所在的表达式中。)
您可以使用子查询执行此操作:
select t.*,
(select count(*)
from t t2
where t2.keyword = t.keyword and t2.day = t.day and
t2.asin <= t.asin
) as ranking
from t;
也就是说,这对于小型数据集也可以正常工作 - 特别是如果你有t(keyword, day, asin)
的索引。对于较大的数据集,变量可能更有效。