如何在mysql视图中为每一行添加排名

时间:2017-07-28 23:03:47

标签: mysql sql

我有这个视图我的mysql数据库

DROP VIEW IF EXISTS time_all;
CREATE VIEW `time_all` AS
SELECT `scans`.`datetime` FROM `time_clock`.`scans`
ORDER BY `scans`.`datetime` ASC;

我想在此视图中为每一行添加唯一的排名值,有人可以告诉我该怎么做吗?

2 个答案:

答案 0 :(得分:1)

我不太确定你的“独特等级”是什么意思。这样的事情可能会做你想要的:

CREATE VIEW `time_all` AS
    SELECT s.`datetime,
           (SELECT COUNT(*) FROM `time_clock`.`scans` s2 WHERE s2.datetime <= s.datetime) as rank
    FROM `time_clock`.`scans` s
    ORDER BY `scans`.`datetime` ASC;

MySQL既不支持窗口函数也不支持CTE。它也不支持视图中的变量。相关子查询是执行此操作的少数几种方法之一。

答案 1 :(得分:0)

用这种方法解决

  delimiter $$
    DROP FUNCTION IF EXISTS `getRank`$$
    CREATE FUNCTION `getRank`() RETURNS int(11)
        DETERMINISTIC
    begin
    return if(@rankId, @rankId:=@rankId+1, @rankId:=1);
    end$$

现在,如果我想使用我创建的功能,只需像这样使用它

CREATE VIEW time_all AS
SELECT getRank() AS 'rank', `scans`.`datetime` FROM `time_clock.scans`
ORDER BY scans.datetime ASC;