我有这个视图我的mysql数据库
DROP VIEW IF EXISTS time_all;
CREATE VIEW `time_all` AS
SELECT `scans`.`datetime` FROM `time_clock`.`scans`
ORDER BY `scans`.`datetime` ASC;
我想在此视图中为每一行添加唯一的排名值,有人可以告诉我该怎么做吗?
答案 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;