Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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
Mysql 向最新记录添加附加值(但显示所有记录)_Mysql_Sql_Mariadb_Greatest N Per Group_Sql View - Fatal编程技术网

Mysql 向最新记录添加附加值(但显示所有记录)

Mysql 向最新记录添加附加值(但显示所有记录),mysql,sql,mariadb,greatest-n-per-group,sql-view,Mysql,Sql,Mariadb,Greatest N Per Group,Sql View,我必须在MariaDB中创建视图,其中包含来自状态的所有数据表: | id | user_id | state | 但是每个用户的最新记录(基于每个用户的最高状态id)。我还必须添加列is\u newest,并将其设置为true(1)-其余记录应为false(0) 在查询中可以这样做吗?如果您运行的是MariaDB 10.3或更高版本,您可以使用行号() 在早期版本中,如果窗口函数不可用,一个选项是加入聚合查询: create view states_view as select s

我必须在MariaDB中创建视图,其中包含来自
状态的所有数据
表:

| id | user_id | state |
但是每个用户的最新记录(基于每个用户的最高状态id)。我还必须添加列
is\u newest
,并将其设置为true(
1
)-其余记录应为false(
0


在查询中可以这样做吗?

如果您运行的是MariaDB 10.3或更高版本,您可以使用
行号()

在早期版本中,如果窗口函数不可用,一个选项是加入聚合查询:

create view states_view as
select 
    s.id,
    s.user_id,
    s.state,
    (s.id = m.max_id) is_newest
from states s
inner join (select user_id, max(id) max_id from states group by user_id) m
    on m.user_id = s.user_id

如果您运行的是MariaDB 10.3或更高版本,则可以使用
row\u number()

在早期版本中,如果窗口函数不可用,一个选项是加入聚合查询:

create view states_view as
select 
    s.id,
    s.user_id,
    s.state,
    (s.id = m.max_id) is_newest
from states s
inner join (select user_id, max(id) max_id from states group by user_id) m
    on m.user_id = s.user_id

您可以在不存在的情况下执行此操作:

select s.*, 
  (not exists(select 1 from states where user_id = s.user_id and id > s.id)) is_newest
from states s

请参阅简化版。

您可以在不存在的情况下执行此操作:

select s.*, 
  (not exists(select 1 from states where user_id = s.user_id and id > s.id)) is_newest
from states s
请参阅简化的。

更高效:更高效: