mysql 取关键字段最小值_只要其他字段等于1,Mysql就获取一个字段的最小值

我有一个我编写的复杂查询,它最初会从中检索我想要的所有数据。现在我意识到我需要一个领域的价值与我现在拥有的价值略有不同。

我有:IF(MIN(tasks.due_date) < NOW(),1,0) AS taskoverdue,我希望拥有它:

IF(MIN(tasks.due_date WHERE tasks.completed != 1) < NOW(),1,0) AS taskoverdue

我知道这个语法不起作用,是否有任何人可以想到的操作会实现这个结果?

由于我的查询很复杂,我不能修改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任何帮助将不胜感激。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值