自定义变量的属性和限制

  1. 使用自定义变量的查询,无法使用查询缓存。
  2. 不能在使用常量或者标识列的地方使用自定义变量,例如表名、列明和LIMIT子句中。
  3. 用户自定义变量的生命周期是在一个连接中有效,所以不能使用它们来做连接间的通信。
  4. 如果使用连接池或者持久化连接,自定义变量可能让看起来毫无关系的代码发生交互。
  5. 在5.0版本之前,是大小写敏感的,所以要注意代码在不同版本之间的兼容性问题。
  6. 不能显示的声明自定义变量的类型。它是一个动态类型。整数初始化为0,浮点型初始化为0.0,字符串初始化为’’。
  7. MySQL优化器在某些场景下可能会将这些变量优化掉,这可能导致代码不按预想的方式运行。
  8. 赋值的顺序和赋值的时间点并不总是固定的,这依赖于优化器的决定。
  9. 赋值符号:=的优先级非常低,所有要注意赋值表达式应该使用明确的括号。
  10. 使用未定义变量不会产生任何错误,如果没有意识到这一点,非常容易犯错。
SET @applykey = 0, @loanRank = 0;

SELECT applyId, custId, ruleVersion, rejectRule, STATUS
, extra, createTime, updateTime, mobile
, IF(STATUS = 1, IF(@applykey <> custId, @loanRank := 1, @loanRank := @loanRank + 1), '') AS applyPassRank
, @applykey := custId
FROM (
SELECT applyId, custId, ruleVersion, rejectRule, STATUS
, extra, createTime, updateTime, mobile
FROM sync.credit_apply
WHERE updateTime < '2019-11-27'
ORDER BY custId, updateTime
) t;

SET @cfkkey = 0, @cfkRank = 0;

SELECT cust_id, loan_amt_quota
, IF(@cfkkey <> cust_id, @cfkRank := 1, @cfkRank := @cfkRank + 1) AS cfkRank
, @cfkkey := cust_id
FROM (
SELECT cust_id, loan_amt AS loan_amt_quota
FROM sync.loandb_cfk_loan
ORDER BY cust_id, create_time
) t

SET @applykey = 0, @loanRank = 0;
SET @cfkkey = 0, @cfkRank = 0; CREATE TABLE test2
AS
SELECT applyId, custId, ruleVersion, rejectRule, STATUS
, extra, loan_amt_quota
, IF(first_finish_loan_Time IS NULL, 1, IF(updateTime < first_finish_loan_Time, 1, 0)) AS is_new
, createTime, updateTime, mobile, applyPassRank, cfk_Rank
FROM (
SELECT applyId, custId, ruleVersion, rejectRule, STATUS
, extra, createTime, updateTime, mobile
, IF(STATUS = 1, IF(@applykey <> custId, @loanRank := 1, @loanRank := @loanRank + 1), '') AS applyPassRank
, @applykey := custId
FROM (
SELECT applyId, custId, ruleVersion, rejectRule, STATUS
, extra, createTime, updateTime, mobile
FROM sync.credit_apply
WHERE updateTime < '2019-11-27'
ORDER BY custId, updateTime
) t
) apply
LEFT JOIN (
SELECT cust_id
, CASE
WHEN locate('|', updateTime) > 0 THEN SUBSTR(updateTime, 1, INSTR(updateTime, '|') - 1)
ELSE updateTime
END AS first_finish_loan_Time
FROM (
SELECT cust_id, GROUP_CONCAT(update_Time ORDER BY update_Time ASC SEPARATOR '|') AS updateTime
FROM sync.loandb_cfk_loan
WHERE (substr(update_Time, 1, 10) < '2019-11-27'
AND loan_type = 'xxx'
AND loan_status = 'yyy')
GROUP BY cust_id
) t
) cfk_loan
ON apply.custId = cfk_loan.cust_id
LEFT JOIN (
SELECT cust_id, loan_amt_quota
, IF(@cfkkey <> cust_id, @cfkRank := 1, @cfkRank := @cfkRank + 1) AS cfk_Rank
, @cfkkey := cust_id
FROM (
SELECT cust_id, loan_amt AS loan_amt_quota
FROM sync.loandb_cfk_loan
ORDER BY cust_id, create_time
) t
) quota
ON apply.custId = quota.cust_id
AND apply.applyPassRank = quota.cfk_Rank;

后来发现不是这个问题而是多加上一个排序字段就OK了:

SET @applykey := ,
@loanRank = ; SELECT applyId, custId, ruleVersion, rejectRule, STATUS
, extra, createTime, updateTime, mobile
, IF(STATUS = , IF(@applykey <> custId, @loanRank := , @loanRank := @loanRank + ), '') AS applyPassRank
, @applykey := custId
FROM (
SELECT applyId, custId, ruleVersion, rejectRule, STATUS
, extra, createTime, updateTime, mobile
FROM sync.credit_apply
WHERE updateTime < '2019-11-28'
ORDER BY custId,STATUS, updateTime
) t HAVING custId=xxx33089

mysql:用户自定义变量关联失效的更多相关文章

  1. 深入MySQL用户自定义变量

    一.到底MySQL的变量分哪几类? MySQL变量一共分为两大类:用户自定义变量和系统变量.如下: 用户自定义变量 局部变量 会话变量 系统变量 会话变量 全局变量 本文涉及的内容为用户自定义会话变量 ...

  2. 深入MySQL用户自定义变量:使用详解及其使用场景案例

    一.前言 在前段工作中,曾几次收到超级话题积分漏记的用户反馈.通过源码的阅读分析后,发现问题出在高并发分布式场景下的计数器上.计数器的值会影响用户当前行为所获得积分的大小.比如,当用户在某超级话题下连 ...

  3. 如何在.Net的MySqlCommand里面使用MySql用户自定义变量?

    Mysql使用@符号代表变量,但C#也恰好使用@代表用户自定义变量,这样两者就会正好冲突了. SELECT () AS rowId, u.*, r.RoleName FROM userinfo u L ...

  4. mysql 用户自定义变量

    SQL中可以用变量来操作值.那么问题就来了.mysql中怎么定义一个变量呢? 一.定义变量 1.定义变量的语法: set @var_name=expr [,@var_name=expr] ... 2. ...

  5. mysql用户自定义变量

    可以先在用户变量中保存值然后在以后引用它:这样可以将值从一个语句传递到另一个语句.用户变量与连接有关.也就是说,一个客户端定义的变量不能被其它客户端看到或使用.当客户端退出时,该客户端连接的所有变量将 ...

  6. MySQL的变量分类总结

    在MySQL中,my.cnf是参数文件(Option Files),类似于ORACLE数据库中的spfile.pfile参数文件,照理说,参数文件my.cnf中的都是系统参数(这种称呼比较符合思维习惯 ...

  7. jmeter参数化数据(_csvread函数、用户自定义变量等)

    以下是转载内容,仔细看过后,觉得用得最多的应该是csvread函数.用户自定义变量以及CSV DATA CONFIG控制器这几个,但是做练习之后,在结果树和聚合报告中怎么查看执行结果是个问题,没找到对 ...

  8. Mysql自定义变量的使用

    用户自定义变量是一个容易被遗忘的MySQL特性,但是如果能用的好,发挥其潜力,在某些场景可以写出非常高效的查询语句.在查询中混合使用过程化和关系化逻辑的时候,自定义变量可能会非常有用.单纯的关系查询将 ...

  9. mysql之变量

    本文内容: 系统变量 用户变量 局部变量 首发日期:2018-04-18 系统变量: 系统变量就是系统已经提前定义好了的变量 系统变量一般都有其特殊意义.比如某些变量代表字符集.某些变量代表某些mys ...

随机推荐

  1. 乐字节Java反射之一:反射概念与获取反射源头class

    一.Java反射机制概念 “程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”,如Python, Ruby是动态语言:显然C++,Java,C#不是动态语言,但是JAVA有着一个非常突出 ...

  2. linux自由软件安装 ./config, make的理解 -- ongoing

    在linux系统中安装软件的其中一种:源码安装的方法是,先输入./configure,然后输入make,最后make install.或许有人留意到没有,这些软件的根目录中开始是没有Makefile的 ...

  3. Layui 上传图片到磁盘上 + Tomcat 配置虚拟路径

    Layui 上传图片到磁盘上 + Tomcat 配置虚拟路径 Tomcat 配置虚拟路径 找到 eclipse 中 tomcat 下面的 server.xml 文件,在 Host 标签里面添加 < ...

  4. 防火墙firewalld报错:ERROR: Exception DBusException: org.freedesktop.DBus.Error.AccessDenied:...

    ERROR: Exception DBusException: org.freedesktop.DBus.Error.AccessDenied: Connection ":1.1985&qu ...

  5. Elasticsearch集群搭建笔记(elasticsearch-6.3.0)

    # 检查Java版本 java -version # 安装Elasticsearch,所有节点均安装并解压 wget https://artifacts.elastic.co/downloads/el ...

  6. java源码 -- LinkedHashMap

    一.概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题. 除此之外,Linke ...

  7. 十二、使用PWM调整LCD背光亮度

    和手机一样,开发板中也带有调整背光亮度的功能. 调整背光亮度依赖于PWM,它通过调节脉冲宽度来控制背光亮度,此方式需要使用PWM驱动.本章将对其进行讲解. 一.用户空间调整背光亮度 一般应用程序可以通 ...

  8. python几个轻量级web框架

    python几个轻量级web框架 2016-04-11 18:04:34 惹不起的程咬金 阅读数 7944更多 分类专栏: 云计算/大数据/并行计算 Python   我最近发表了一篇名为 ‘7 Mi ...

  9. jenkins 安装插件失败

    大家在使用jenkins安装插件的时候经常遇到一下问题,就是插件由于网络或者墙的原因无法直接下载,出现下面截图的问题,处理办法有两种 第一种:更换源的问题jenkins->系统管理->管理 ...

  10. C++万能头文件<bits/stdc++.h>的内容与优缺点

    最近发现了一个C++的头文件bits/stdc++.h,听说这是一个几乎包含了所有C++库函数的头文件,就想更深入的了解一下,下面是头文件内容 // C++ includes used for pre ...