Boa Tarde. Sou novo no forum e estou com uma grande duvida.
No cliente que trabalho estou precisando unir tres tabelas em uma unica saida.
Seriam elas:
tbcolab – Colunas: IDPESSOA, IDCOLAB, CODIMATR
tbpessoa – Colunas: IDPESSOA, NOMEPES
tbhistocrach – Colunas: IDCOLAB, ICARD
Na tabela TBHISTOCRACH podem ter varios registros. Com isso eu preciso pegar com a coluna DATAINI mais atual.
Se alguem poder me ajudar ficarei muito grato.
Agradeço desde já!
pesquise por winner join voce consegue fazer isto com sql
Creio que ficaria assim:
join da tabela TBPESSOA(IDPESSOA) com a tabela TBCOLAB(IDPESSOA)
join da tabela TBCOLAB(IDCOLAB) com a tabela TBHISTOCRATH(IDCOLAD)
buscando também pelo MAX(DATAINI)
SELECT * FROM tab1
INNER JOIN tab2 ON (tab1.campo = tab2.campo)
INNER JOIN tab3 ON (tab3.campo = tab2.campo)
WHERE tab1.campo = ‘valor’
Pessoal,
Obrigado pela ajuda ! Conforme voces falaram eu consegui fazer funcionar.
Mas sempre tem um ''Porem" e é nele que fiquei de mãos atadas.
Me deparei com o seguinte problema:
Na tabela TBHISTOCRACH tem os campos DATAINI/HORAINI e DATAFINA/HORAFINA. Na tabela que preciso pegar os acessos de cada pessoa (TBMARCACESS) tem os campos DATAACES/HORAACES.
Com base na data e hora do acesso, preciso que o resultado seja um valor entre a TBHISTOCRACH.DATAINI/HORAINI e TBHISTOCRACH.DATAFINA/HORAFINA.
Acredito que este seja um grande problema. Não tenho nem ideia se isso realmente é possivel.
Agradeço a ajuda de todos.
Abraços!
Pessoa,
Com muita luta eu consegui fazer funcionar. Para quem precisar um dia:
SELECT * FROM tbpessoa
INNER JOIN tbcolab ON (tbpessoa.idpessoa = tbcolab.idpessoa)
INNER JOIN tbhistocrach ON (tbhistocrach.idcolab = tbcolab.idcolab)
inner join tbmarcaacess on (tbhistocrach.icard = tbmarcaacess.icard and tbhistocrach.datainic > tbmarcaacess.dataaces and tbhistocrach.datafina < tbmarcaacess.dataaces)
where tbhistocrach.stathist = 1
order by dataaces desc
O que que eu fiz. Eu peguei o valor da data de marcação e falei que ele teria que ser entre o valor de data inicio e data fim.
pra fazer com intervalo de datas voce pode fazer assim
FROM tabela WHERE DataInicial BETWEEN ‘" + data1 + "’ AND ‘" + data2 + "’"