ORACLE SQL 获取连续28天有销售的店铺

最近公司一SSRS报表需求改变,同比店铺的选取为连续28天有销售的店铺,思考良久,发现可以利用ROW_NUMBER()
OVER(PARTITION BY COLUMN01 ORDER BY
COLUMN02)来实现,ROW_NUMBER()从1开始,按照COLUMN01分组以及COLUMN02排序.

1:先看数据源,要求取出上面连续28天内销售金额大于0的XF_STORECODE :

2: 分解一下,由图中看出,只要取XF_STORECODE,COUNT(1)>28就可以了.

3: 完整代码:

4: 文本代码


 1 WITH STORE_COMP AS
2 (SELECT T.XF_STORECODE, T.XF_TXDATE, SUM(T.XF_AMTSOLD) XF_AMTSOLD
3 FROM XF_VIPITEMDM T, XF_ITEMMAS T1
4 WHERE T.XF_PLU = T1.XF_PLU
5 AND SUBSTR(T.XF_STORECODE, 3, 2) IN (‘NK‘, ‘SC‘, ‘NS‘, ‘MB‘)
6 AND T1.XF_GROUP2 = ‘NIKE‘
7 AND T1.XF_GROUP9 <> ‘特许装备‘
8 AND T.XF_TXDATE >= TO_DATE(‘20140501‘, ‘yyyymmdd‘)
9 AND T.XF_TXDATE <= TO_DATE(‘20140531‘, ‘yyyymmdd‘)
10 GROUP BY T.XF_STORECODE, T.XF_TXDATE
11 HAVING SUM(T.XF_AMTSOLD) > 0)
12 SELECT XF_STORECODE
13 FROM (SELECT XF_STORECODE,
14 XF_TXDATE,
15 ROW_NUMBER() OVER(PARTITION BY XF_STORECODE ORDER BY XF_TXDATE) ROW_NUM,
16 TRUNC(XF_TXDATE - ROW_NUMBER()
17 OVER(PARTITION BY XF_STORECODE ORDER BY XF_TXDATE)) ROWDIFF
18 FROM STORE_COMP)
19 GROUP BY XF_STORECODE, ROWDIFF
20 HAVING COUNT (1) >= 28

5: 如有更好的方法,欢迎赐教,谢谢!

6: 本人欲建一个运动行业的网站,欢迎有网页制作技术的朋友利用业余时间一起合作. 有兴趣的可以和我联系QQ
568625626.

时间: 2024-08-06 14:27:42

ORACLE SQL 获取连续28天有销售的店铺的相关文章

Oracle中获取连续的序列号范围的SQL (二)

方案3的思路比较值得学习,我们将层层剖析它的结构: 1:对每一条记录找它的前一行 所谓连续的序列号就是看相同格式的情况下前一行记录与当前行的记录序号的值是否相差为1: 如果相差为1,则说明两个序列号是连续的: 如果不为1,则两个序列号不是连续的 select numFormat,lag(code, 1) over(partition by numFormat order by code) previousCode, code,max(code) over(partition by numForm

oracle sql 获取本季度所有月份,上季度所有月份

上季度所有月份: SELECT TO_CHAR(ADD_MONTHS(ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'),A * 3),-ROWNUM),'YYYYMM') LAST_Q FROM (SELECT TO_CHAR(SYSDATE,'Q')-1 A FROM DUAL) CONNECT BY ROWNUM <= 3 ORDER BY 1; 本季度所有月份: SELECT TO_CHAR(ADD_MONTHS(ADD_MONTHS(TRUNC(SYSDATE, 'YY

Mysql获取连续的15天的销售数据

之前有做一个项目是关于亚马逊那块的erp.然后有一个需求是获取连续15天的销售信息,连续十五周的销售信息和连续12个月的销售数据做成图表统计;并且不连续的数据要将其补充完整,补充为0. 经过一番的百度和研究,最终写出来的SQL如下:(基本上我是没看懂) 在这之前先贴出我涉及到的三个项目表结构. 上图这个表中保存的是主要的销售报告信息. 这个表存放的是相应的卖家信息 这个表没啥用,你可以用任何一张数据在15条以上的表代替这张表,只是起一个参照作用而已,不查询其中的任何数据. 接下来上查询连续15天

Oracle SQL语言DML语句与事务_超越OCP精通Oracle视频教程培训28

Oracle SQL语言DML语句与事务_超越OCP精通Oracle视频教程培训28 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第3/5套:Oracle SQL语言DML语句与事务.主要学习Oracle数据库SQL语句INSERT命令,学习使用UPDATE命令,学习使用DELETE命令,学习创建PL/SQL对象,事务概念与控制,锁的检测和锁争用,了解撤销数据. Oracle SQL语言DML语句与事务管理,课

获取oracle sql语句中绑定变量值的方法

在诊断 sql的性能问题时,我们有时候需要获取其绑定变量的实际值,然后将此实际值带入到sql语句当中,用原来的sql构成select语句(带where条件),实际的执行一下,看一下选择性如何. 本文就是说获取其绑定变量值的方法.本文的编写得到枯荣长老的帮助,在此表示感谢. 本文适用于与oracle 10G或者更高版本的db. alter session set nls_date_format = 'yyyy-mm-dd,hh24:mi:ss'; set linesize 400 col sql_

oracle sql语句

##########基本操作##########启动数据库:su - oraclesqlplus / as sysdbaSQL> startup 对scott用户解锁:SQL> conn / as sysdbaSQL> alter user scott identified by tiger account unlock; 连接到指定的数据库用户:SQL> conn scott/tiger 实现操作系统开机数据库自动open:vi /etc/oratab--------------

Oracle SQL性能优化

转载自:http://www.cnblogs.com/rootq/archive/2008/11/17/1334727.html (1)      选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection ta

Oracle SQL 调优健康检查脚本

Oracle SQL 调优健康检查脚本 我们关注数据库系统的性能,进行数据库调优的主要工作就是进行SQL的优化.良好的数据架构设计.配合应用系统中间件和写一手漂亮的SQL,是未来系统上线后不出现致命性能问题的有力保证. 在CBO时代,一个SQL的执行计划是多样的.影响执行计划的因素也从过去RBO时代的SQL书写规则变为综合性因素.这为我们生成更加优秀执行计划提供了基础,同时也给我们进行调优带来的很多麻烦. 目前我们通常的做法,是通过AWR报告或者调试手段,发现某某SQL有问题,之后从Librar

Oracle SQl优化总结

连续两个公司都作为外派人员到客户方工作,缺少归属感的同时,对数据库技术的热爱是我唯一的安慰,毕竟这是自己喜欢的事情,还可以做下去. 因为客户项目的需要,我又开始接触Oracle,大部分工作在工作流的优化和业务数据的排查上.为了更好的做这份工作,我有参考过oracle达人,Oracle.10g性能分析与优化思路,基于海量数据的数据库设计与优化等书籍,以及案例学习SQL优化的视频等.基本上我工作中接触的主要是Oracle SQl的优化,基于长时间做SQL优化工作,现在对Oracle的SQL优化做一下