sql 随记

  1. 排序ORDER BY

 ORDER BY字句位置是SELECT语句中最后一个字句

          降序:DESC      升序:ASC(默认)

 

  1. WHERE 语句

操作符:=  <>  !=   <   <=  !<   >  >=   !>    BETWEEN (在指定两个值之间)   

ISS NULL (为NULL值)

2.1         AND操作符

2.2         OR操作符(AND操作符优先级大于OR)

  1. IN操作符
  2. NOT操作符
  3. LIKE操作符

5.1         百分号(%)通配字符

表示任意字符出现任意次数

5.2         下划线(_)通配符

与%一样,但_只匹配单个字节

  1. 方括号([])通配符

     用来指定一个字符集,他必须匹配指定位置(通配符位置)的一个字符,可以用前缀

  1. 字段

RTRIM() 函数去掉右边所有空格,LTRIM()函数去掉串左边空格,TRIM()函数去掉串左右两边空格。

拼接字段:用 “+”或“||” MYSQL用CONCAT(  , )   lg: name+’(’+sex+’)’ 或name||’(’||sex||’)’

获取当前时间:Access使用NOW() ;DB2和PostgreSQL使用CURRENT_DATE;MySQL使用CURDATE();Oracle使用SYSDATE;SQL使用GETDATE()。

提取串组成部分:Access使用MID();Oracle和PostgreSQL使用SUBSTR();MySQL、SQL Server和Sybase使用SUBSTRING()

数据类型转化:Access和Oracles使用多个函数,每种类型的转化有一个函数;DB2和PostgreSQL使用CAST();MySQL和SQL  Server、Sybase使用CONVERT()

  1. 常用文本处理函数

       LEFT()                      返回串左边字符

LENGTH()(DATELENG()、LEN())  返回串长度

LOWER()(Access使用LCASE() )         将串转为小写

SOUNDEX()            返回串的SOUNDEX值

UPPER()(Access()使用UCASE())          将串转化为大写

  1. 聚集函数

AVG()          返回某列的平均值

COUNT() 返回某列的行数

MAX()          返回某列的最大值

MIN()          返回某列的最小值

SUM()          返回某列值之和

10. 分组 GROUP BY

HAVING过滤分组(GROUP BY后面)

11. 取别名:Oralcel没有AS关键字

 

 12.环比时间:

环比时间(单位:天)可以把天转化为       秒,分,时,周,月,年 来计算

TO_NUMBER(TO_CHAR(TO_DATE(TIME_ID,'YYYYMMDDHH24MI')-1,'YYYYMMDD')||'0000') HTIME,

Lg:

WITH T_TABLE AS (

          SELECT T.TIME_ID,

          TO_CHAR(TO_DATE(T.TIME_ID, 'YYYYMMDDHH24MI') - 1, 'YYYYMMDDHH24MI') HTIME,

          NULLIF(TO_NUMBER(T1), 0) VAL

          FROM IPMSODM.O_VOBB_D T

          WHERE T.TIME_ID <= '201712130000'

          and t.ip='10.238.177.34'

          and t.SYSTEM_NAME='KLISBC4'     

     )

          SELECT TO_CHAR(TO_DATE(C.TIME_ID,'YYYYMMDDHH24MI'),'YYYY-MM-DD'), C.VAL, ROUND(100*(C.VAL-H.VAL)/NULLIF(H.VAL,0),2) HB

          FROM T_TABLE C LEFT JOIN T_TABLE H

        ON C.HTIME= H.TIME_ID

       WHERE rownum <=15

        ORDER BY C.TIME_ID

 

附着失败次数(用户原因):sum(case when procedure_type=1  and procedure_status in (2,3) and  fail_cause_code in (3,5,6,7,8,15,19)    then 1 else 0 end) 

 

13 .平滑查询

SELECT TO_CHAR(TO_DATE(REPLACE(TIME_ID, SUBSTR(TIME_ID, 1, 8), 20171126),'YYYYMMDDHH24MI'),'YYYY-MM-DD HH24:MI'),

       AREA_NAME,

       IMEI_TAC,

       TERMINAL_BRAND,

       TERMINAL_MODEL,

       HTTP_SUC_RATE,

       HTTP_DELAY,

       HTTP_DLRATE_AVG,

       HTTP_DLRATE

  FROM DM_OWNAPP_TERMINAL A

  WHERE

  A.TIME_ID = '201707030000'

  AND A.AREA_NAME =?

   AND (HTTP_SUC_RATE < 70 OR HTTP_DELAY > 500 OR HTTP_DLRATE_AVG < 100 OR

       HTTP_DLRATE < 300)

   AND ROWNUM < 200

 ORDER BY DBMS_RANDOM.VALUE()

  1. 工单查询(非实时派单)

if("jk".equals(flag)){

   tWhere= "AND T.ALARMFROM_TYPE_EN = 'alarmFromType_groupCusEte' ";

   tWhere1= "AND TYPE='type_jk_area' ";

}

WITH O AS

        (

          SELECT T.ORDER_CITY, T.INDEX_NAME, T.ORDER_NENAME

          FROM O_OM_TASK_EC_ORDER T

          WHERE T.ORDER_ID NOT IN

          (

            SELECT T.ORDER_ID

            FROM O_OM_TASK_EC_ORDER T

            WHERE T.ORDER_STATUS = '已归档'

          )

         --AND T.ORDER_STATUS = '运行中'

          AND T.REPLY_TIME IS NULL  

          AND T.INDEX_NAME IS NOT NULL

         AND T.ALARMFROM_TYPE_EN IN ('alarmFromType_mobileEte','alarmFromType_internetOfThings')

        UNION

          SELECT T.ORDER_CITY, T.INDEX_NAME, T.ORDER_NENAME -- //归了档但归档时间到当前时间小于2天

          FROM O_OM_TASK_EC_ORDER T

          WHERE T.ORDER_STATUS = '已归档'

          AND T.ALARMFROM_TYPE_EN IN ('alarmFromType_mobileEte','alarmFromType_internetOfThings')

            AND T.INDEX_NAME IS NOT NULL

            AND TRUNC(SYSDATE)- TRUNC(T.REPLY_TIME)<2

        ), Q AS(

          SELECT * FROM ( --//求相同派单对象最近派单过的工单号

            SELECT T.ORDER_ID, T.ORDER_CITY, T.INDEX_NAME, T.ORDER_NENAME,

            RANK() OVER(PARTITION BY T.ORDER_CITY, T.INDEX_NAME, T.ORDER_NENAME ORDER BY T.REPLY_TIME DESC) T_ROWNUM

            FROM O_OM_TASK_EC_ORDER T

            WHERE T.INDEX_NAME IS NOT NULL AND T.ORDER_STATUS = '已归档'

            AND T.ALARMFROM_TYPE_EN IN ('alarmFromType_mobileEte','alarmFromType_internetOfThings')

          ) WHERE T_ROWNUM=1

        )

        SELECT TYPE, AREA_NAME, CITY_NAME,

          C.INDEX_NAME, INDEX_UNIT, INDEX_VALUE, THRESHOLD, C_SYMBOL,

          ALARMOBJ_NAME, ALARM_TITLE, RULE, ORDER_DESC, C.DETAIL_VALUE, Q.ORDER_ID

       FROM DM_NRTM_SEND_ORDER_H C

        LEFT JOIN Q ON Q.ORDER_CITY = C.AREA_NAME

            AND Q.INDEX_NAME = C.INDEX_NAME

            AND Q.ORDER_NENAME = C.ALARMOBJ_NAME

       WHERE NOT EXISTS

          (

          SELECT * FROM O

          WHERE O.ORDER_CITY = C.AREA_NAME

            AND O.INDEX_NAME = C.INDEX_NAME

            AND O.ORDER_NENAME = C.ALARMOBJ_NAME

          )

          AND TYPE<>'type_jk_area'

      AND ORDER_TIME= '201710271200'

  1. 工单查询(非实时派单工单稽核)

SELECT ORDER_ID, TEMP_TYPE_EN, KEY, INDEX_NAME, QUERY_TIME FROM

      (

        SELECT ORDER_ID,

          T.ORDER_CITY||','||ORDER_NENAME KEY,

          T.TEMP_TYPE_EN, T.INDEX_NAME,

          TO_CHAR(SYSDATE - 1, 'YYYYMMDD') || '0000' QUERY_TIME -- // 用回单时间的第二天的指标进行回填,此处用SYSDATE - 1而不是用T.REPLY_TIME + 1,是为了排除第一次稽核无指标就一直不能回填的情况

        FROM O_OM_TASK_EC_ORDER T

        WHERE TO_CHAR(SYSDATE, 'YYYYMMDD') > TO_CHAR(T.REPLY_TIME + 1, 'YYYYMMDD') -- //为了能取到指标。因为当天只能查前一天的数据

          AND T.AFT_INDEX_VALUE IS NULL AND T.INDEX_NAME IS NOT NULL

          AND T.INDEX_VALUE IS NOT NULL AND T.ORDER_STATUS = '已归档'

          AND T.TEMP_TYPE_EN||'-'||T.INDEX_NAME IN ('type_badUrl-HTTP访问成功率')

       UNION ALL

        SELECT ORDER_ID,

          T.ORDER_CITY||','||ORDER_NENAME KEY,

          T.TEMP_TYPE_EN, T.INDEX_NAME,

          TO_CHAR(SYSDATE - 1, 'YYYYMMDD') || '0000' QUERY_TIME  -- //因为当天只能查前一天的数据

        FROM O_OM_TASK_EC_ORDER T

        WHERE

          (

            (T.THRESHOLD_FLAG = '>' AND T.AFT_INDEX_VALUE > T.INDEX_THRESHOLD)

            OR

            (T.THRESHOLD_FLAG = '<' AND T.AFT_INDEX_VALUE < T.INDEX_THRESHOLD)

          ) AND T.INDEX_NAME IS NOT NULL AND T.INDEX_VALUE IS NOT NULL

          AND T.AFT_INDEX_VALUE IS NOT NULL AND T.ORDER_STATUS = '已归档'

          AND T.TEMP_TYPE_EN||'-'||T.INDEX_NAME IN ('type_badUrl-HTTP访问成功率')

      ) ORDER BY TEMP_TYPE_EN, QUERY_TIME

     

对于表中两行记录完全一样的情况,可以用下面语句获取到去掉重复数据后的记录:

select distinct * from 表名

 

14.MySql查询NOT EXISTS使用栗子:解释:查询a表排除在b表中的某些条件值数据

select *
from tb_videotape_label a
WHERE NOT EXISTS
(
select * from tb_download_record b
where a.id = b.label_id
and b.download_status = 1
)
and timestampdiff(minute,a.begintime,a.endtime)>60

 

posted @ 2017-12-19 17:14  悠悠乃  阅读(90)  评论(0编辑  收藏  举报