Pergunta

Eu tenho 2 mesas, usando uma junção interna para consultá-los.

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ?

Ele conta os ids de entradas em relatórios entre 2 datas. A Tabela 1 contém informações sobre os relatórios (data, groupid etc), table2 detém as entradas sobre os relatórios.

Eu gostaria de fazer uma consulta quase exatamente o mesmo, exceto que só seleciona os ids do relatório com a data mais recente, entre estas 2 datas.

alguém pode ajudar? Eu não consigo colocar minha cabeça em torno de Max (data) consultas do tipo -. Tudo que eu voltar é uma contagem de todos os id e também a data max, em vez de apenas os ids a partir da data max

Obrigado,


Eu estive pensando, talvez, uma consulta SQL nested - você pode fazer isso? Posso encontrar referências no Google, mas não pode fazê-lo funcionar ... Algo semelhante a:

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ? AND 
(
    SELECT MAX(date) 
    FROM table1 
    WHERE date > ? AND date < ?
)

Não é possível chegar a esse trabalho, porém, e quando tento testá-lo em phpMyAdmin, ele me chuta para fora com um erro dizendo que o meu usuário não tem privilégios SELECT. Estranho, uma vez que este é um servidor de teste que eu estou conectado em como root.

Foi útil?

Solução

Sem mais informações sobre a estrutura das tabelas, gostaria de sugerir que você tentar algo como isto:

SELECT t2.id
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.relation_id
WHERE t1.date BETWEEN ? AND ?
HAVING MAX(t1.date)

Eu não testei isso, mas deve apontar para uma direção que poderia ir com este problema. Os seus outros sugestão de usar uma subconsulta é válido e trabalho poderia algo como isto:

SELECT *
FROM table2 t2 
WHERE t2.parent_id IN (
    SELECT t1.relation_id
    FROM table1 t1
    WHERE t1.date BETWEEN ? AND ?
    GROUP BY t1.relation_id
    HAVING MAX(t1.date)
)

Ou em uma junção de uma tabela temporária:

SELECT *
FROM table2 t2
INNER JOIN (
    SELECT t1.relation_id
    FROM table1 t1
    WHERE t1.date BETWEEN ? AND ?
    GROUP BY t1.relation_id
    HAVING MAX(t1.date)
) AS t1 ON t2.relation_id = t1.relation_id

Outras dicas

 ...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10

você irá obter 10 primeiras linhas com as datas

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top