Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql sql查询以像警报一样及时获取冲突_Mysql_Sql - Fatal编程技术网

Mysql sql查询以像警报一样及时获取冲突

Mysql sql查询以像警报一样及时获取冲突,mysql,sql,Mysql,Sql,我正在尝试创建一个sql查询,以获取表中可能存在的冲突列表,但到目前为止,我的sql不起作用。 这个想法是有一个类似警报的功能 如果date\u start=date\u end这意味着一次 示例:date\u start=2018-11-07 10:37:00和date\u end=2018-11-07 10:37:00 如果date\u start not null和date\u end=null,则其中一天列应不同于0 示例:date\u start=2018-11-07 10:37:00

我正在尝试创建一个sql查询,以获取表中可能存在的冲突列表,但到目前为止,我的sql不起作用。 这个想法是有一个类似警报的功能

如果
date\u start=date\u end
这意味着一次

示例:
date\u start=2018-11-07 10:37:00
date\u end=2018-11-07 10:37:00

如果
date\u start not null
date\u end=null
,则其中一天列应不同于
0

示例:
date\u start=2018-11-07 10:37:00,date\u end=NULL,Monday=2
. 这意味着每周一都要开始开始约会,那时我就要开始排队了

我现在的问题是,如果我有两行可以同时在同一时间和日期,我将尝试获取冲突列表。以下是我的数据库示例:

我在上面创建了一个sql查询,但效果不好,有人能帮忙吗

SELECT
        id
    FROM
        my_table
    WHERE
        date_start IN(
        SELECT
            date_start
        FROM
            my_table
        WHERE
            date_start = date_end 
        GROUP BY
            date_start
        HAVING
            COUNT(*) > 1
    )
    UNION
    SELECT
        id
    FROM
        my_table
    WHERE
        DATE_FORMAT(date_start, '%H:%i:%s') IN(
        SELECT
            DATE_FORMAT(date_start, '%H:%i:%s')
        FROM
            my_table
        WHERE
            date_end IS NULL AND(
                monday = 2 OR tuesday = 3 OR wednesday = 4 OR thursday = 5 OR friday = 6 OR saturday = 7 OR sunday = 1
            )
        GROUP BY
            DATE_FORMAT(date_start, '%H:%i:%s')
        HAVING
            COUNT(*) > 1
    )
    UNION
    SELECT
        id
    FROM
        my_table
    WHERE
        DATE_FORMAT(date_start, '%H:%i:%s') IN(

        SELECT
            CASE WHEN
                        (DAYOFWEEK(date_start) = 2 AND (select monday from my_table where monday = 2) IS NOT NULL)
                     OR (DAYOFWEEK(date_start) = 3 AND (select tuesday from my_table where tuesday = 3) IS NOT NULL)
                     OR (DAYOFWEEK(date_start) = 4 AND (select wednesday from my_table where wednesday = 4) IS NOT NULL)
                     OR (DAYOFWEEK(date_start) = 5 AND (select thursday from my_table where thursday = 5) IS NOT NULL)
                     OR (DAYOFWEEK(date_start) = 6 AND (select friday from my_table where friday = 6) IS NOT NULL)
                     OR (DAYOFWEEK(date_start) = 7 AND (select saturday from my_table where saturday = 7) IS NOT NULL)
                     OR (DAYOFWEEK(date_start) = 1 AND (select sunday from my_table where sunday = 1) IS NOT NULL)
                 THEN DATE_FORMAT(date_start, '%H:%i:%s')
                 ELSE NULL
                 END
        FROM
            my_table
        WHERE
            (DAYOFWEEK(date_start) = 2
                                   OR DAYOFWEEK(date_start) = 3
                                   OR DAYOFWEEK(date_start) = 4
                                   OR DAYOFWEEK(date_start) = 5
                                   OR DAYOFWEEK(date_start) = 6
                                   OR DAYOFWEEK(date_start) = 7
                                   OR DAYOFWEEK(date_start) = 1
            )
        GROUP BY
            DATE_FORMAT(date_start, '%H:%i:%s')
        HAVING
            COUNT(*) > 1
    )

也许是这样的

SELECT date_start FROM alarms 
WHERE date_end IS NULL AND 
monday + tuesday + wednesday + thursday + friday + saturday + sunday > 0 
GROUP BY TIME(date_start) 
HAVING COUNT(monday)>0 OR COUNT(tuesday)>0 OR COUNT(wednesday)>0 OR 
COUNT(thursday)>0 OR COUNT(friday)>0 OR COUNT(saturday)>0 OR COUNT(sunday)>0
SELECT a1.date_start AS oneshow,a2.date_start AS weekly,DAYOFWEEK(a1.date_start) as dow 
FROM alarms AS a1
LEFT JOIN alarms AS a2 ON
  a1.date_start >= a2.date_start AND a2.date_end IS NULL
    AND TIME(a1.date_start) = TIME(a2.date_start)
    AND DAYOFWEEK(a1.date_start) IN (a2.monday, a2.tuesday, a2.wednesday, a2.thursday, a2.friday, a2.saturday, a2.sunday)
WHERE a1.date_end IS NOT NULL 
更新 如果希望捕获一次性事件和每周事件之间的冲突,可以使用如下查询

SELECT date_start FROM alarms 
WHERE date_end IS NULL AND 
monday + tuesday + wednesday + thursday + friday + saturday + sunday > 0 
GROUP BY TIME(date_start) 
HAVING COUNT(monday)>0 OR COUNT(tuesday)>0 OR COUNT(wednesday)>0 OR 
COUNT(thursday)>0 OR COUNT(friday)>0 OR COUNT(saturday)>0 OR COUNT(sunday)>0
SELECT a1.date_start AS oneshow,a2.date_start AS weekly,DAYOFWEEK(a1.date_start) as dow 
FROM alarms AS a1
LEFT JOIN alarms AS a2 ON
  a1.date_start >= a2.date_start AND a2.date_end IS NULL
    AND TIME(a1.date_start) = TIME(a2.date_start)
    AND DAYOFWEEK(a1.date_start) IN (a2.monday, a2.tuesday, a2.wednesday, a2.thursday, a2.friday, a2.saturday, a2.sunday)
WHERE a1.date_end IS NOT NULL 

数据库是什么?请发布表格结构。日期开始和日期结束是时间戳,星期一列和其他日期列是int@summoner我想穿刺者是在问你在运行哪个SQL数据库(如MS SQL Server、MySQL、Oracle)啊,对不起,是MySQL,我不明白你想实现什么。。。这张桌子的用途是什么?您所提供的代码返回的数据是什么?为什么不正确?如果你想在这样的问题上得到帮助,请在一个网站上放置一个测试用例,比如感谢你的帮助,但是它不起作用。当我使用你的查询时,我仍然有很多冲突。查询的目的是捕获并仅显示冲突-并且它只显示每个冲突时间一次。当您有时间时-您应该进行另一个查询以获取包含该时间(并且不是一次性事件)的所有行。如果您需要相反的方法,即不是现有冲突列表,而是防止冲突的方法,那么您必须将数据库切换到PostgreSQL,它允许使用排除约束,以便您不能插入与任何现有时间间隔重叠的时间间隔。谢谢您的回答。首先,我不想阻止冲突。我希望允许用户在相同的日期和时间添加行,然后根据冲突显示警告列表。其次,我成功地在查询中获得了一次快照(date_ustart=date_end)和每周重复(date_end为null,其中一个days列与0不同)的冲突。我现在的问题是一次投篮和每周重复之间的冲突。例句:每周一重复一次,一次是在周一同时进行。在我共享的数据库中,你可以找到最后两行的案例。