Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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获取一个字段的最小值,只要另一个字段等于1_Mysql - Fatal编程技术网

Mysql获取一个字段的最小值,只要另一个字段等于1

Mysql获取一个字段的最小值,只要另一个字段等于1,mysql,Mysql,我编写了一个复杂的查询,最初它确实从中检索到了我想要的所有数据。现在我意识到我需要一个字段的值与现在的值略有不同 我有:IFMINtasks.due_date

我编写了一个复杂的查询,最初它确实从中检索到了我想要的所有数据。现在我意识到我需要一个字段的值与现在的值略有不同

我有:IFMINtasks.due_date IFMINtasks.due_tasks.completed所在的日期!=1<现在,1,0为过期

我知道这个语法不起作用,有没有任何人能想到的可以达到这个效果的操作

由于查询比较复杂,我无法更改where子句或group by子句,并且我无法在select子句中运行子查询,而不会大大降低应用程序的速度。哦,我正在使用php,但我正在寻找一个mysql解决方案

以下是我的完整查询,仅供参考:

SELECT 
    tickets.id,
    tickets.user_id,
    tickets.name,
    COUNT(DISTINCT tasks.id) AS numTasks,
    IF(MIN(tasks.due_date) < NOW(),1,0) AS taskoverdue,
    IF(tickets.due_date < NOW(),1,0) AS ticketoverdue,
    tasks.queue_id AS queue_id ,
    IF(MIN(tasksteps.time_due) < NOW(),1,0) AS taskstepoverdue,
    COUNT(DISTINCT ticketnotes.ticket_id) as notes
FROM 
    tickets
    LEFT OUTER JOIN ticketsinqueues ON tickets.id = ticketsinqueues.ticket_id
    LEFT OUTER JOIN tasks ON tickets.id = tasks.ticket_id
    LEFT OUTER JOIN tasksteps ON tasks.id = tasksteps.task_id 
    LEFT OUTER JOIN ticketnotes ON tickets.id = ticketnotes.ticket_id
WHERE
    ticketsinqueues.queue_id != tasks.queue_id AND
    tickets.status = (var decided on run time)
GROUP BY
    tickets.id,tasks.queue_id
UNION
SELECT 
    tickets.id,
    tickets.user_id,
    tickets.name,
    COUNT(DISTINCT tasks.id) AS numTasks,
    IF(MIN(tasks.due_date) < NOW(),1,0) AS taskoverdue,
    IF(tickets.due_date < NOW(),1,0) AS ticketoverdue,
    tasks.queue_id AS queue_id ,
    IF(MIN(tasksteps.time_due) < NOW(),1,0) AS taskstepoverdue,
    COUNT(DISTINCT ticketnotes.ticket_id) as notes
FROM 
    tickets
    LEFT OUTER JOIN ticketsinqueues ON tickets.id = ticketsinqueues.ticket_id
    LEFT OUTER JOIN tasks ON tickets.id = tasks.ticket_id
    LEFT OUTER JOIN tasksteps ON tasks.id = tasksteps.task_id 
    LEFT OUTER JOIN ticketnotes ON tickets.id = ticketnotes.ticket_id
WHERE
    ticketsinqueues.queue_id = tasks.queue_id AND
    tickets.status = (var decided on run time)
GROUP BY
    tickets.id,tasks.queue_id
UNION
SELECT 
    tickets.id,
    tickets.user_id,
    tickets.name,
    0 AS numTasks,
    0 AS taskoverdue,
    IF(tickets.due_date < NOW(),1,0) AS ticketoverdue,
    ticketsinqueues.queue_id AS queue_id ,
    0 AS taskstepoverdue,
    0 AS notes
FROM 
    tickets 
    LEFT OUTER JOIN ticketsinqueues ON tickets.id = ticketsinqueues.ticket_id
WHERE 
tickets.status = (var decided on run time) AND
NOT EXISTS (
    SELECT 
        * 
    FROM 
        tasks 
    WHERE 
        tickets.id = tasks.ticket_id AND 
        tickets.queue_id = tasks.queue_id 
    GROUP BY 
        tasks.ticket_id,
        tasks.queue_id)
ORDER BY id desc

任何帮助都将不胜感激

哥们,这太简单了,太合乎逻辑了,我简直不敢相信我居然想不出来。谢谢,你太棒了。
MAX(tasks.completed != 1 AND tasks.due_date < NOW()) AS taskoverdue