甲骨文表
id timestamp status
1 2019-10-20 12:34:56.000 approved
1 2019-10-22 12:34:56.000 approved
2 2019-10-20 17:34:56.000 approved
2 2019-10-21 12:34:56.000 approved
3 2019-10-23 18:10:10.000 mod_in_ip
3 2019-10-24 11:10:10.000 approved
3 2019-10-24 12:10:10.000 approved
4 2019-10-25 12:10:10.000 approved
4 2019-10-25 18:10:10.000 approved
我想将id标记为 new 或 edited 。问题是从5pm到5pm的记录中被认为是工作时间段, 即从
‘2019-10-25 17:00:00’到‘2019-10-26 17:00:00’被认为是工作时间段
或昨天的下午5点到今天下午5点是一个工作时间。
例如:如果您查看表格并获得预期结果,则带有昨天6:00 PM记录和今天11AM记录的id记录应标记为new。
预期结果/结果应为
1 edited
2 new
3 new
4 edited
最初我尝试过此方法,但它无法解决上述问题
select id,
case
when count(id)<=1 then 'New'
else 'Edited' End AS prefix
from(select id,status ,trunc(timestamp) from table
where
status='approved' and id in (1,2,3,4)
group by id,status,trunc(timestamp))
group by id
结果是
1 Edited
2 Edited
3 new
4 new
但预期结果是
1 edited
2 new
3 new
4 edited
我正在寻找解决方案,例如 从5pm到5pm 的 innerquery组记录, 以便外部查询可以正常工作,或者完全不同的解决方案也是可行的
https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=abd90416004000043c85316423d64b17
如果要将5pm到5pm视为“同一”天,可以很容易地将Oracle日期向前或向后移动一天的时间(例如,可以将5pm向前移动7小时以成为“下一个”的开始)天)
SQL> create table ora_table (id number, time_data timestamp, status varchar2(30));
Table created.
SQL> insert into ora_table values (1 , to_timestamp('2019-10-20 12:34:56.000', 'yyyy-mm-dd hh24:mi:ss.ff'), 'approved');
1 row created.
SQL> insert into ora_table values (1 , to_timestamp('2019-10-22 12:34:56.000', 'yyyy-mm-dd hh24:mi:ss.ff'), 'approved');
1 row created.
SQL> insert into ora_table values (2 , to_timestamp('2019-10-20 17:34:56.000', 'yyyy-mm-dd hh24:mi:ss.ff'), 'approved');
1 row created.
SQL> insert into ora_table values (2 , to_timestamp('2019-10-21 12:34:56.000', 'yyyy-mm-dd hh24:mi:ss.ff'), 'approved');
1 row created.
SQL> insert into ora_table values (3 , to_timestamp('2019-10-23 18:10:10.000', 'yyyy-mm-dd hh24:mi:ss.ff'), 'mod_in_ip');
1 row created.
SQL> insert into ora_table values (3 , to_timestamp('2019-10-24 11:10:10.000', 'yyyy-mm-dd hh24:mi:ss.ff'), 'approved');
1 row created.
SQL> insert into ora_table values (3 , to_timestamp('2019-10-24 12:10:10.000', 'yyyy-mm-dd hh24:mi:ss.ff'), 'approved');
1 row created.
SQL> insert into ora_table values (4 , to_timestamp('2019-10-25 12:10:10.000', 'yyyy-mm-dd hh24:mi:ss.ff'), 'approved');
1 row created.
SQL> insert into ora_table values (4 , to_timestamp('2019-10-25 18:10:10.000', 'yyyy-mm-dd hh24:mi:ss.ff'), 'approved');
1 row created.
SQL>
SQL> select id, time_data, trunc(time_data) true_date, trunc(time_data+7/24) mapped_date
2 from ora_table;
ID TIME_DATA TRUE_DATE MAPPED_DA
---------- ---------------------------------- --------- ---------
1 20-OCT-19 12.34.56.000000 PM 20-OCT-19 20-OCT-19
1 22-OCT-19 12.34.56.000000 PM 22-OCT-19 22-OCT-19
2 20-OCT-19 05.34.56.000000 PM 20-OCT-19 21-OCT-19 <===
2 21-OCT-19 12.34.56.000000 PM 21-OCT-19 21-OCT-19
3 23-OCT-19 06.10.10.000000 PM 23-OCT-19 24-OCT-19 <===
3 24-OCT-19 11.10.10.000000 AM 24-OCT-19 24-OCT-19
3 24-OCT-19 12.10.10.000000 PM 24-OCT-19 24-OCT-19
4 25-OCT-19 12.10.10.000000 PM 25-OCT-19 25-OCT-19
4 25-OCT-19 06.10.10.000000 PM 25-OCT-19 26-OCT-19
9 rows selected.
问题内容: 我想每天下午2点执行工作。我可以使用哪种方法安排工作? 运行2小时后,它将停止工作并重新计划第二天的下午2点。 问题答案:
我想要功能,但是当日期接近时,它太精确了——例如。我不想让它显示“3小时内”,而是“今天”——所以基本上是“每日”精度。 我试着使用函数,如果日期差超过1天,则不格式化
问题内容: 我需要创建两个日期对象。如果当前日期和时间是2012年3月9日上午11:30,则 日期对象d1应该是 2012年3月9日上午12:00 日期对象d2应该包含当前日期本身 日期不会输入,它是系统日期。 更新 : 给出当前日期和时间 问题答案: 应该是IST 2012年3月9日00:00:00
获取今天的日期(年、月、日) 用法 Your browser does not support the video tag. 案例:小闹钟 功能:2019年12月25日,播放圣诞快乐歌
本文向大家介绍Shell中取今天、昨天、前天的时间操作代码,包括了Shell中取今天、昨天、前天的时间操作代码的使用技巧和注意事项,需要的朋友参考一下 1. 取今天时间 2. 取昨天时间 3. 取前天时间 效果展示:
问题内容: 换句话说,我想要提供Joda-Time的功能: 但没有Joda-Time,只有java.util.Date。 不推荐使用.setHours()等方法。有没有更正确的方法? 问题答案: 由于不推荐使用这些方法,因此您可以使用: 如果最终需要一个对象,只需调用