得到这个查询:
select
T.id_empresa, max(periodo) as ultimoPeriodo, (
select sum(monto) from cuotasindical.pagos
where id_empresa = T.id_empresa and periodo = max(T.periodo)
) as ultimoMonto,
min(periodo) as periodoAnterior, (
select sum(monto) from cuotasindical.pagos
where id_empresa = T.id_empresa and periodo = min(T.periodo)
) as anteriorMonto
from
(
select
P1.id_empresa, P1.periodo, sum(monto) as monto
from cuotasindical.pagos P1
where P1.id_empresa in (select id_empresa from cuotasindical.empresa where id_delegacion = 5)
group by P1.id_empresa, P1.periodo
having P1.periodo in (
select * from (
select periodo
from cuotasindical.pagos
where P1.id_empresa = id_empresa order by periodo desc limit 2
) as L
)
and count(distinct P1.periodo) > 1
) T
group by id_empresa
having (abs(max(monto) - min(monto))*100/
(
select sum(monto) from cuotasindical.pagos T2
where T2.id_empresa = id_empresa and T2.periodo = max(periodo)
) > 10);
需要比较每个 empresa 的最后两个 pagos(按 periodo 排序),看看它们的差异是否大于或小于百分比(在本例中为 10)
我明白了
Error Code: 1054. Unknown column 'P1.id_empresa' in 'where clause'
唯一进行比较的 where 子句是带有限制的子查询
having P1.periodo in (
select * from (
select periodo
from cuotasindical.pagos
where P1.id_empresa = id_empresa
order by periodo desc limit 2
) as L
)
and count(distinct P1.periodo) > 1
双子查询是为了避免 IN 子句中的限制 2(在 this 链接上获取)
为什么我会收到这个错误?我认为我可以在having子句的子查询中加入group by之后(就像where子句一样)
或者我遗漏了一个错误?
提前致谢
最佳答案
问题在于 mysql 在子查询中只有一层深范围。
我也有子查询限制的问题,所以,我做什么 wasp>
..having P1.periodo in
(
select max(periodo) as periodo
from cuotasindical.pagos H
where P1.id_empresa = id_empresa
) OR
P1.periodo in (
select max(periodo) as periodo
from cuotasindical.pagos H
where P1.id_empresa = id_empresa and periodo != P1.periodo
)
and count(distinct P1.periodo) > 1
关于mysql - 错误 1054:having 子句与 id 分组的子查询连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15952268/