sql - 使用子查询比较同一张表上的日期
问题描述
我需要获取 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
如何正确获取数据?
解决方案
尝试这个,
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)
推荐阅读
- java - 如何在struts2中为下拉列表使用国际化
- git - 如何通过 ssh 在服务器上初始化 git?
- android - 如何使用标签标题从 Android PagerAdapter 返回片段
- java - 跨文档查询的 Elasticsearch 复合分组
- android - 如何将模态表顶部边缘更改为圆形不起作用
- flutter - copyWith() 函数有什么作用?
- java - 使用 Apache POI 将前景色/突出显示应用于 excel 的特定行
- azure - 如何使用 azure API 根据磁盘大小查找 Azue Ultra 磁盘 IOPS 和磁盘吞吐量范围
- c++ - 模板初始化:
- c# - 如何从 ASP.NET 中的文件路径获取文件并将文件返回给客户端