SQL:如何检查我的日程安排是否正常

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

我有一个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-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的原始代码也无法工作,因为他在我提交此答案后添加了信息,酷。