SQL:如何检查我的日程安排是否正常
我有一个DB,看起来像这样:SQL:如何检查我的日程安排是否正常,sql,mariadb,Sql,Mariadb,我有一个DB,看起来像这样: FromDate ToDate ProfileUID 2017-02-10 07:00:00 2017-02-10 15:30:00 TB_D 2017-02-09 23:00:00 2017-02-10 07:00:00 ZK_D 2017-02-09 17:30:00 2017-02-09 23:00:00 DL_D 2017-02-09 07:00:00 2017-02
FromDate ToDate ProfileUID
2017-02-10 07:00:00 2017-02-10 15:30:00 TB_D
2017-02-09 23:00:00 2017-02-10 07:00:00 ZK_D
2017-02-09 17:30:00 2017-02-09 23:00:00 DL_D
2017-02-09 07:00:00 2017-02-09 17:30:00 AM_D
2017-02-08 23:00:00 2017-02-09 07:00:00 CK_D
2017-02-08 17:30:00 2017-02-08 23:00:00 DJ_N
此数据库通常是手动修改的,有些错误可以由用户完成
我正在尝试执行SQL查询,以检查计划是否正常,这意味着我想知道,直到我的记录在这里,我们只填充了接下来两天的记录,并且计划中是否没有黑洞,这意味着有一段时间没有填充profileUID
到目前为止,我所拥有的:
SELECT *,LAG (ToDate) OVER (PARTITION BY FromDate ORDER BY FromDate)
FROM `dashboardcalendar`
WHERE FromDate>= NOW()
ORDER BY `dashboardcalendar`.`FromDate` ASC
编辑:如果无法在您的MariaDB版本上使用窗口功能,请尝试以下操作:
SELECT FromDate, ToDate, ProfileUID, next_FromDate, last_ToDate,
CASE WHEN next_record_uid is null then 'Warning - Gap after' end warn1,
CASE WHEN prev_record_uid is null then 'Warning - Gap before' end warn2
FROM (
SELECT t1.FromDate, t1.ToDate, t1.ProfileUID,
t2.ProfileUID next_record_uid,
t3.ProfileUID prev_record_uid
FROM table t1
LEFT JOIN table t2
ON t1.ToDate = t2.FromDate
LEFT JOIN table t3
ON t1.FromDate = t3.ToDate
)
这并不能解释时间上的重叠——如果两个时间段重叠,它将给出假阳性警告
原始答复:
我会使用LEAD和LAG,然后使用另一个select进行比较:
SELECT FromDate, ToDate, ProfileUID, next_FromDate, last_ToDate,
CASE WHEN ToDate < next_FromDate then 'Warning - Gap after' end warn1,
CASE WHEN FromDate > last_ToDate then 'Warning - Gap before' end warn2
FROM (
SELECT FromDate, ToDate, ProfileUID,
LEAD(FromDate,1) OVER (ORDER BY FromDate) next_FromDate,
LAG(FromDate,1) OVER (ORDER BY FromDate) last_ToDate
FROM table
)
您不需要进行分区,根据您的描述,似乎每条记录都涵盖了一段不同的时间段,因此没有可分组的内容。我的DB是10.1.14-Mariadb您所说的我目前拥有的是什么意思?MariaDB 10.1.14中没有窗口函数,是在10.2中添加的。您无法在10.1.14中执行此操作。MariaDB 10.2中引入了窗口函数。因此,即使是OP的原始代码也无法工作,因为他在我提交此答案后添加了信息,酷。