如何写这样的sql语句(Oracle):
1.写出连续三个月有费用产生的用户
账单表结构:
user_id bill_month amount
20050101 200801 100.32
20050102 200801 60.99
............................ 2. 写出在网日期(使用日期)三个月以上的用户
套餐表结构
user_id apply_date ......
20050101 2008-01-01 ......
20050102 2008-02-01 .......
...............................
1.写出连续三个月有费用产生的用户
账单表结构:
user_id bill_month amount
20050101 200801 100.32
20050102 200801 60.99
............................ 2. 写出在网日期(使用日期)三个月以上的用户
套餐表结构
user_id apply_date ......
20050101 2008-01-01 ......
20050102 2008-02-01 .......
...............................
解决方案 »
- select into 怎么有问题?
- oracle 如何导出表结构!
- 各位大大,想做开发,求教需要哪些知识
- 输入错误,如何回到命令提示符下面
- red hat13.8版本的linux安装oracle9.2.0的问题,麻烦高手看看
- PL/SQL中的YYYY/MM/DD格式怎么转化成YYYYMMDD???
- 怎样才能方便的把access表转换成oracle ,help me
- 删除和创建数据库的问题 --100分,急
- 如果在SQL语中用数字序号表示某列
- 数据库缓存服务请教?标题要长.............................
- 这个SQL我应该怎么写
- Oracle中,取Date时发生的灵异事件。。。高手请进
SELECT user_id,bill_month,amount FROM TABLE WHERE
WHERE LAG(bill_month,1,0) over (partition by user_id order by user_id,bill_month)-bill_month=1
AND LAG(bill_month,2,0) over (partition by user_id order by user_id,bill_month)-bill_month=2
2.假设apply_date是日期类型
SELECT user_id FROM (SELECT USER_ID,TO_CHAR(apply_date,'YYYY-MM') apply_date FROM TABLE
GROUP BY USER_ID,apply_date) GROUP BY user_id HAVING COUNT(1)>=3写了个大概写法,未测试,不行的话,楼主提供详细建表SQL文和测试数据在帮你做。
1.bill_month是字符类型。现在需要把bill_month当参数传进来。比如查询日期为200803,则需要查询出200712,200801,200802这三个月连续有费用产生的用户。如何改sql啊? 非常感谢。
SELECT USER_ID FROM TABLE WHERE bill_month IN (200803-1,200803-2,200803-3) GROUP BY USER_ID
HAVING COUNT(1)>=3
SELECT USER_ID FROM TABLE WHERE bill_month IN (200803-1,200803-2,200803-3) GROUP BY USER_ID
HAVING COUNT(1)> =3
发现查不出数据来,但实际数据库里存在数据的,
这个意思是 传入的参数的值是 200803
200803-1 表示这个参数 减 一个月SELECT USER_ID FROM TABLE WHERE bill_month IN (
add_months(to_date('200803','yyyymm'),-1),
add_months(to_date('200803','yyyymm'),-2),
add_months(to_date('200803','yyyymm'),-3)
)
GROUP BY USER_ID
HAVING COUNT(1)> =3