我想获取带有条件的日期(b.date)信息(例如,当c。Code = 001时,b。日期应获取过去一个月的日期,对于c。001以外的日期,则b表b和表c中的日期应大于sysdate。 请同样找到以下说明。 创建表A 作为(选择b。日期,c。表b中的代码,表c 哪里b。代码= c.code 和b。日期应取自过去一个月的日期c。代码= 001 和b。在c时,日期应从大于sysdate的日期获取日期。代码不是001)
表A的日期和代码列下方应填充 对于前
Code Date
Code001 7/01/19
Code001 8/01/19
...
Code111 7/02/19
能否请您告诉我如何使用oracle sql实现此目的?
如果您需要有关此问题的任何其他信息,或者我的解释令人困惑,请告诉我。
感谢您的支持, 瓦尼。
答案 0 :(得分:0)
我不太确定这个问题,但是根据您提供的内容,我正在对两个查询进行合并(#Oracle Sql)..我知道根据表的大小,这不是一个优化的查询,可能会由于笛卡尔积而消耗资源..请参见以下内容:
select b.date,c.code from <table> b,<table> c
where b.code=c.code
and c.code='001'
and b.date>= trunc(add_months(sysdate, -1),'MM') and b.date<trunc(sysdate, 'MM')
union
select b.date,c.code from <table> b,<table> c
where b.code=c.code
and c.code<>'001'
and b.date>sysdate;
答案 1 :(得分:0)
应该可以通过实现WHERE
子句中的逻辑来实现这一目标。
WHERE
( c.Code = '001' AND b.Date >= TRUNC(sysdate, 'mm')
OR b.Date >= sysdate
或者(如果您存储的是没有时间的日期)
WHERE
( c.Code = '001' AND b.Date >= TRUNC(sysdate, 'mm')
OR b.Date >= TRUNC(sysdate)
NB:日期功能在很大程度上取决于RDBMS;以上解决方案适用于Oracle。在MySQL中,您可以这样做:
WHERE
( c.Code = '001' AND b.Date >= DATE_FORMAT(CURDATE(), '%Y-%m-01')
OR b.Date >= NOW() -- or CURDATE()