Sql 在请求中,oracle指定在30分钟内指定增量(人员可以前来更改)
我的要求是甲骨文,它运行良好,没有问题 我在API中使用它来检查卡的状态(允许访问,不允许访问)。但是请求中有一个问题 我检查卡片上的活动和工作时间表。但我仍然需要考虑30分钟的时间差,在计划之前和之后(这样员工可以早点来,晚点离开)。30但是我对00:00到23:59的日程安排有点问题 问题是,该查询在23:30到00:29之间不执行此计划。只有这样才有可能通过。我将感谢你的帮助 带注释的选择(这是一个delta为30分钟的选择)最后一个选择是专为工作计划选择的(但我在此表单中不需要它)Sql 在请求中,oracle指定在30分钟内指定增量(人员可以前来更改),sql,oracle,select,Sql,Oracle,Select,我的要求是甲骨文,它运行良好,没有问题 我在API中使用它来检查卡的状态(允许访问,不允许访问)。但是请求中有一个问题 我检查卡片上的活动和工作时间表。但我仍然需要考虑30分钟的时间差,在计划之前和之后(这样员工可以早点来,晚点离开)。30但是我对00:00到23:59的日程安排有点问题 问题是,该查询在23:30到00:29之间不执行此计划。只有这样才有可能通过。我将感谢你的帮助 带注释的选择(这是一个delta为30分钟的选择)最后一个选择是专为工作计划选择的(但我在此表单中不需要它) 您使
您使用的是MySQL还是Oracle?WHERE子句中的
b.del='false'
条件使左连接返回常规的内部连接结果。将条件移动到ON子句以获得true LEFT JOIN结果。@jarlh oracle)但我认为查询应该类似)@jarlh我根据您的建议更改了请求示例数据和所需结果将非常有用。我可能还建议您简化查询——它似乎比问题所暗示的要复杂得多。
select a.status
from EM_STATUS_CARD a
left join EM_CARD b on a.ID_CARD = b.ID_CARD and b.del = 'false'
left join EM_CARD_ZONE v on a.ID_CARD = v.ID_CARD
left join EM_EMPLOYEE m on a.EMPLOYEE_ID = m.guid
left join EM__WORK_SCHEDULE p on m.SCHEDULE_ID = p.guid
INNER JOIN(
select MAX(l.id) id, l.ID_CARD
from EM_STATUS_CARD l
GROUP BY l.ID_CARD
) t
on t.id = a.id AND t.ID_CARD = a.ID_CARD
where
a.ID_CARD = '0000003995E0'
-- and TO_CHAR (sysdate, 'HH24:MI' ) between to_char((to_date(p.FROMS, 'HH24:MI') - (1/24/60) * 30), 'HH24:MI ') and to_char((to_date(p.tos, 'HH24:MI') + (1/24/60) * 30) , 'HH24:MI')
and TO_CHAR (sysdate, 'HH24:MI' ) between p.FROMS and p.tos