首页 > 解决方案 > 使用子查询比较同一张表上的日期

问题描述

我需要获取 1/5 到 30/6 之间最新的 vip 使用奖励之后的赚取奖励数据

我的表如下:

VIPCODE TXDATETIME      ACTION  BONUS
1       2019/04/01 17:24    E   7507
1       2019/05/28 20:00    E   2920
1       2019/05/30 20:00    U   -19200
1       2019/06/01 17:45    E   11000
1       2019/06/15 17:45    U   -4200
1       2019/06/20 13:30    E   400
2       2019/05/02 19:12    E   2700
2       2019/05/02 19:12    U   -14400
2       2019/05/06 17:30    E   1463
2       2019/06/06 17:30    U   -4400
2       2019/07/20 12:38    E   2010
3       2019/05/18 13:58    E   2955
3       2019/06/17 19:20    E   -9000
3       2019/06/18 20:16    E   1000
3       2019/06/24 16:42    E   2000

甚至尝试连接表或子查询返回错误:缺少右括号

我用过这个sql:

SELECT * FROM VIPPoint v where v.txdatetime between to_date('2019-05-01', 'yyyy-mm-dd') and to_date('2019-06-30', 'yyyy-mm-dd')
and v.txdatetime > (SELECT * FROM VIPPoint d where d.XF_ACTION='U' and d.xf_txdatetime < to_date('2019-06-30', 'yyyy-mm-dd') and v.VIPCODE
=d.VIPCODE and rownum=1 order by d.xf_txdatetime desc)

我的 expext 输出是:

VIPCODE TXDATETIME      ACTION  BONUS
1       2019/06/20 13:30    E   400
3       2019/06/18 20:16    E   1000
3       2019/06/24 16:42    E   2000

如何正确获取数据?

标签: sqlsubquery

解决方案


尝试这个,

SELECT * FROM VIPPoint v WHERE CONVERT(DATE,v.TXDATETIME) BETWEEN 
CONVERT(DATE, '2019-05-01') AND CONVERT(DATE, '2019-06-30') AND v.ACTION = 'E' 
AND v.TXDATETIME > (SELECT MAX(TXDATETIME) FROM VIPPoint vp 
WHERE CONVERT(DATE,vp.TXDATETIME) BETWEEN CONVERT(DATE, '2019-05-01') 
AND CONVERT(DATE, '2019-06-30') AND vp.ACTION = 'U'AND vp.VIPCODE = v.VIPCODE)

推荐阅读