'Subqueries in the same table in mysql
I have a raw SQL query that I'm using in Laravel framework to get last presence of a user in a convocation table. Basically, the master query is to get all the convocations of a given user that belongs to a specific ministry. Like:
Select
`conv_pessoas.`id`,
`conv_pessoas`.`pessoa_id`,
`conv_pessoas`.`created_at`,
`conv_pessoas`.`data_chegada`,
`conv_pessoas`.`data_saida`,
`pessoas`.`nome`,
`ministerios`.`nome` as `ministerio_nome`,
`eventos`.`nome` as `evento_nome`,
`evento_data`.`data_inicial` as `data_evento_inicial`,
`evento_data`.`data_final` as `data_evento_final`,
(
SELECT
max(`convocacao_ministerio_pessoas`.`data_chegada`)
FROM
`convocacao_ministerio_pessoas`
WHERE
`convocacao_ministerio_pessoas`.`pessoa_id` = `conv_pessoas`.`pessoa_id`
AND `convocacao_ministerio_pessoas`.`data_chegada` IS NOT NULL
) as ultima_presenca_geral,
(
SELECT
max(`convocacao_ministerio_pessoas`.`data_chegada`)
FROM
`convocacao_ministerio_pessoas`
WHERE
`convocacao_ministerio_pessoas`.`pessoa_id` = `conv_pessoas`.`pessoa_id`
AND `convocacao_ministerio_pessoas`.`ministerio_id` = `conv_pessoas`.`ministerio_id`
AND `convocacao_ministerio_pessoas`.`data_chegada` IS NOT NULL
) as ultima_presenca_no_ministerio,
(
SELECT
count(*)
FROM
`convocacao_ministerio_pessoas`
WHERE
`convocacao_ministerio_pessoas`.`pessoa_id` = `conv_pessoas`.`pessoa_id`
AND `convocacao_ministerio_pessoas`.`ministerio_id` = `conv_pessoas`.`ministerio_id`
) as qtd_convocacoes_no_ministerio,
(
SELECT
count(*)
FROM
`convocacao_ministerio_pessoas`
WHERE
`convocacao_ministerio_pessoas`.`pessoa_id` = `conv_pessoas`.`pessoa_id`
AND `convocacao_ministerio_pessoas`.`ministerio_id` = `conv_pessoas`.`ministerio_id`
AND `convocacao_ministerio_pessoas`.`data_chegada` IS NOT NULL
) as qtd_presenca_no_ministerio
from
`convocacao_ministerio_pessoas` as `conv_pessoas`
inner join `pessoas` on `conv_pessoas`.`pessoa_id` = `pessoas`.`id`
inner join `convocacaos` on `conv_pessoas`.`convocacao_id` = `convocacaos`.`id`
inner join `ministerios` on `conv_pessoas`.`ministerio_id` = `ministerios`.`id`
inner join `eventos` on `convocacaos`.`evento_id` = `eventos`.`id`
inner join `evento_data` on `convocacaos`.`data_evento_id` = `evento_data`.`id`
where
`conv_pessoas`.`ministerio_id` = '2'
and `convocacaos`.`church_id` = 1
and `evento_data`.`data_final` between '2022-02-19 00:00:00'
and '2022-02-22 23:59:59'
But I need to get the last presence of this user in this same convocation table, but It's not necessary to be in the same ministry. I've created subqueries for that. But I'm not sure if it's the best approach. I need some help to ensure I'm using the bests practices. ( I'm not advanced in SQL ).
**notes:**
Translations:
ministerio = ministry
convocacao = convocation
pessoa = person (user)
evento = event
data chegada = arrival date
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|

