mysql窗口函数去重
1 2 3 4 5 6 7 8 9 10 11 12 13
| set @row_number := 0; SELECT @row_number:=CASE WHEN @customer_no = jiedao_zz THEN @row_number + 1 ELSE 1 END AS num, @customer_no:=jiedao_zz jiedao_zz, address_ys, description_ys FROM wenshuo_dmdzzh_log_tmp ORDER BY jiedao_zz
|
应用自MySQL官方文档 http://www.mysqltutorial.org/mysql-row_number/
表结构
id,
文章id article_id,
创建时间 check_date,
文章状态check_end
一篇文章可能有多个状态,根据不同的创建时间,一开始的编辑中,然后审核,通过
查询每篇文章的最后状态,根据分组函数,和状态创建时间排序,然后循环的时候如果文章ID改变,则计算从头开始。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| set @row_number := 0; SELECT @row_number:=CASE WHEN @customer_no = article_id THEN @row_number + 1 ELSE 1 END AS num, @customer_no:=article_id article_id, check_date,check_end FROM manuscript_check ORDER BY article_id, check_date DESC
结果: num 文章ID 创建时间 文章状态 1 3 2020-03-01 08:21:45 3 2 3 2020-03-01 08:21:43 2 1 5 2020-03-01 08:01:33 1 2 5 2020-03-01 08:01:29 2
|
MySQL左右连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| 左连接右连接内连接
1. 内连接 SELECT * FROM sys_user_post p INNER JOIN sys_role_menu m on p.user_id = m.role_id;
如果不写INNER默认内连接 如果p.user_id 和 m.role_id列有相同的才输出,并且进行笛卡尔积, 左边两个2,右边3个二,生成六条记录。 左边两个2,右边没有2,则结果中没有2
2. 左连接 LEFT JOIN
3. 右连接 RIGHT JOIN 4. 全连接mysql不支持 5. using()关键字 SELECT * FROM p INNER JOIN m on p.user_id = m.role_id;
SELECT * from p RIGHT join r using( user_id )
|