Fórum Duvida de Select #131459
31/03/2010
0
fiz o seguinte select
SELECT
GS_ORCAMENTOS.ORC_NUM,
(
SELECT
MIN(ORCAGE_DATA)
FROM
GS_ORCAMENTOS_AGENDA
WHERE
SYS_DEL=0 AND ASS_ID=100 AND ORC_ID=GS_ORCAMENTOS.ORC_ID
) DATAINICIAL,
(
SELECT
MAX(ORCAGE_DATA)
FROM
GS_ORCAMENTOS_AGENDA
WHERE
SYS_DEL=0 AND ASS_ID=100 AND ORC_ID=GS_ORCAMENTOS.ORC_ID
) DATAFINAL
FROM
GS_ORCAMENTOS
LEFT JOIN GS_TABELAS_PRECOS
ON (GS_TABELAS_PRECOS.TABPRC_ID = GS_ORCAMENTOS.ORC_TABPRE)
LEFT JOIN GS_CLIENTES_FORNECEDORES
ON (GS_CLIENTES_FORNECEDORES.CLIFOR_ID = GS_ORCAMENTOS.CLIFOR_ID
AND GS_CLIENTES_FORNECEDORES.ASS_ID=GS_ORCAMENTOS.ASS_ID)
LEFT JOIN GS_EVENTOS
ON (GS_EVENTOS.ORC_ID = GS_ORCAMENTOS.ORC_ID
AND GS_EVENTOS.SYS_DEL = 0 AND GS_EVENTOS.ASS_ID=100)
LEFT JOIN GS_FUNCIONARIOS
ON (GS_FUNCIONARIOS.FUN_ID = GS_ORCAMENTOS.FUN_ID
AND GS_FUNCIONARIOS.ASS_ID=GS_ORCAMENTOS.ASS_ID)
LEFT JOIN GS_ORCAMENTOS_EQUIPAMENTOS
ON (GS_ORCAMENTOS_EQUIPAMENTOS.ORC_ID = GS_ORCAMENTOS.ORC_ID
AND GS_FUNCIONARIOS.ASS_ID=GS_ORCAMENTOS.ASS_ID)
LEFT JOIN GS_EQUIPAMENTOS_APRESENTACAO
ON (GS_EQUIPAMENTOS_APRESENTACAO.EPTAPR_ID = GS_ORCAMENTOS_EQUIPAMENTOS.EQT_ID
AND GS_EQUIPAMENTOS_APRESENTACAO.ASS_ID=GS_ORCAMENTOS.ASS_ID)
WHERE
GS_ORCAMENTOS.SYS_DEL = 0
AND
((GS_ORCAMENTOS.ORC_NUM=1454) or (GS_ORCAMENTOS.ORC_NUM=900))
--d DATAFINAL BETWEEN '02/28/2010 00:00' AND '03/31/2010 23:59'
AND
GS_ORCAMENTOS.ASS_ID = 100
que trara o seguinte resultado
ORC_NUM DATAINICIAL DATAFINAL
900 2008-09-30 00:00:00.000 2008-10-06 00:00:00.000
900 2008-09-30 00:00:00.000 2008-10-06 00:00:00.000
900 2008-09-30 00:00:00.000 2008-10-06 00:00:00.000
900 2008-09-30 00:00:00.000 2008-10-06 00:00:00.000
900 2008-09-30 00:00:00.000 2008-10-06 00:00:00.000
900 2008-09-30 00:00:00.000 2008-10-06 00:00:00.000
1454 2010-03-08 00:00:00.000 2010-03-15 00:00:00.000
1454 2010-03-08 00:00:00.000 2010-03-15 00:00:00.000
1454 2010-03-08 00:00:00.000 2010-03-15 00:00:00.000
minha duvida é o seguinte:
Como eu posso filtrar por data gostaria de trazer pelo campo DataFinal apenas os registros 2010-03-15 por exemplo
como eu faço isso aproveitando meu select.
Obs. estou usando SQL SERVER
no aguardo
EVandro
SELECT
GS_ORCAMENTOS.ORC_NUM,
(
SELECT
MIN(ORCAGE_DATA)
FROM
GS_ORCAMENTOS_AGENDA
WHERE
SYS_DEL=0 AND ASS_ID=100 AND ORC_ID=GS_ORCAMENTOS.ORC_ID
) DATAINICIAL,
(
SELECT
MAX(ORCAGE_DATA)
FROM
GS_ORCAMENTOS_AGENDA
WHERE
SYS_DEL=0 AND ASS_ID=100 AND ORC_ID=GS_ORCAMENTOS.ORC_ID
) DATAFINAL
FROM
GS_ORCAMENTOS
LEFT JOIN GS_TABELAS_PRECOS
ON (GS_TABELAS_PRECOS.TABPRC_ID = GS_ORCAMENTOS.ORC_TABPRE)
LEFT JOIN GS_CLIENTES_FORNECEDORES
ON (GS_CLIENTES_FORNECEDORES.CLIFOR_ID = GS_ORCAMENTOS.CLIFOR_ID
AND GS_CLIENTES_FORNECEDORES.ASS_ID=GS_ORCAMENTOS.ASS_ID)
LEFT JOIN GS_EVENTOS
ON (GS_EVENTOS.ORC_ID = GS_ORCAMENTOS.ORC_ID
AND GS_EVENTOS.SYS_DEL = 0 AND GS_EVENTOS.ASS_ID=100)
LEFT JOIN GS_FUNCIONARIOS
ON (GS_FUNCIONARIOS.FUN_ID = GS_ORCAMENTOS.FUN_ID
AND GS_FUNCIONARIOS.ASS_ID=GS_ORCAMENTOS.ASS_ID)
LEFT JOIN GS_ORCAMENTOS_EQUIPAMENTOS
ON (GS_ORCAMENTOS_EQUIPAMENTOS.ORC_ID = GS_ORCAMENTOS.ORC_ID
AND GS_FUNCIONARIOS.ASS_ID=GS_ORCAMENTOS.ASS_ID)
LEFT JOIN GS_EQUIPAMENTOS_APRESENTACAO
ON (GS_EQUIPAMENTOS_APRESENTACAO.EPTAPR_ID = GS_ORCAMENTOS_EQUIPAMENTOS.EQT_ID
AND GS_EQUIPAMENTOS_APRESENTACAO.ASS_ID=GS_ORCAMENTOS.ASS_ID)
WHERE
GS_ORCAMENTOS.SYS_DEL = 0
AND
((GS_ORCAMENTOS.ORC_NUM=1454) or (GS_ORCAMENTOS.ORC_NUM=900))
--d DATAFINAL BETWEEN '02/28/2010 00:00' AND '03/31/2010 23:59'
AND
GS_ORCAMENTOS.ASS_ID = 100
que trara o seguinte resultado
ORC_NUM DATAINICIAL DATAFINAL
900 2008-09-30 00:00:00.000 2008-10-06 00:00:00.000
900 2008-09-30 00:00:00.000 2008-10-06 00:00:00.000
900 2008-09-30 00:00:00.000 2008-10-06 00:00:00.000
900 2008-09-30 00:00:00.000 2008-10-06 00:00:00.000
900 2008-09-30 00:00:00.000 2008-10-06 00:00:00.000
900 2008-09-30 00:00:00.000 2008-10-06 00:00:00.000
1454 2010-03-08 00:00:00.000 2010-03-15 00:00:00.000
1454 2010-03-08 00:00:00.000 2010-03-15 00:00:00.000
1454 2010-03-08 00:00:00.000 2010-03-15 00:00:00.000
minha duvida é o seguinte:
Como eu posso filtrar por data gostaria de trazer pelo campo DataFinal apenas os registros 2010-03-15 por exemplo
como eu faço isso aproveitando meu select.
Obs. estou usando SQL SERVER
no aguardo
EVandro
Evandro Abreu
Curtir tópico
+ 0
Responder
Posts
31/03/2010
Emerson Nascimento
veja se pode ser assim:
SELECT
GS_ORCAMENTOS.ORC_NUM,
MIN(GS_ORCAMENTOS_AGENDA.ORCAGE_DATA) DATAINICIAL,
MAX(GS_ORCAMENTOS_AGENDA.ORCAGE_DATA) DATAFINAL
FROM
GS_ORCAMENTOS
LEFT JOIN GS_TABELAS_PRECOS
ON (GS_TABELAS_PRECOS.TABPRC_ID = GS_ORCAMENTOS.ORC_TABPRE)
LEFT JOIN GS_CLIENTES_FORNECEDORES
ON (GS_CLIENTES_FORNECEDORES.CLIFOR_ID = GS_ORCAMENTOS.CLIFOR_ID
AND GS_CLIENTES_FORNECEDORES.ASS_ID=GS_ORCAMENTOS.ASS_ID)
LEFT JOIN GS_EVENTOS
ON (GS_EVENTOS.ORC_ID = GS_ORCAMENTOS.ORC_ID
AND GS_EVENTOS.SYS_DEL = 0 AND GS_EVENTOS.ASS_ID=100)
LEFT JOIN GS_FUNCIONARIOS
ON (GS_FUNCIONARIOS.FUN_ID = GS_ORCAMENTOS.FUN_ID
AND GS_FUNCIONARIOS.ASS_ID=GS_ORCAMENTOS.ASS_ID)
LEFT JOIN GS_ORCAMENTOS_EQUIPAMENTOS
ON (GS_ORCAMENTOS_EQUIPAMENTOS.ORC_ID = GS_ORCAMENTOS.ORC_ID
AND GS_FUNCIONARIOS.ASS_ID=GS_ORCAMENTOS.ASS_ID)
LEFT JOIN GS_EQUIPAMENTOS_APRESENTACAO
ON (GS_EQUIPAMENTOS_APRESENTACAO.EPTAPR_ID = GS_ORCAMENTOS_EQUIPAMENTOS.EQT_ID
AND GS_EQUIPAMENTOS_APRESENTACAO.ASS_ID=GS_ORCAMENTOS.ASS_ID)
LEFT JOIN GS_ORCAMENTOS_AGENDA
ON GS_ORCAMENTOS_AGENDA.ASS_ID=GS_ORCAMENTOS.ASS_ID
AND GS_ORCAMENTOS_AGENDA.ORC_ID=GS_ORCAMENTOS.ORC_ID
WHERE
GS_ORCAMENTOS.SYS_DEL = 0
AND ((GS_ORCAMENTOS.ORC_NUM=1454) or (GS_ORCAMENTOS.ORC_NUM=900))
AND GS_ORCAMENTOS.ASS_ID = 100
GROUP BY
GS_ORCAMENTOS.ORC_NUM
HAVING
MAX(GS_ORCAMENTOS_AGENDA.ORCAGE_DATA) BETWEEN '02/28/2010' AND '03/31/2010 23:59'
SELECT
GS_ORCAMENTOS.ORC_NUM,
MIN(GS_ORCAMENTOS_AGENDA.ORCAGE_DATA) DATAINICIAL,
MAX(GS_ORCAMENTOS_AGENDA.ORCAGE_DATA) DATAFINAL
FROM
GS_ORCAMENTOS
LEFT JOIN GS_TABELAS_PRECOS
ON (GS_TABELAS_PRECOS.TABPRC_ID = GS_ORCAMENTOS.ORC_TABPRE)
LEFT JOIN GS_CLIENTES_FORNECEDORES
ON (GS_CLIENTES_FORNECEDORES.CLIFOR_ID = GS_ORCAMENTOS.CLIFOR_ID
AND GS_CLIENTES_FORNECEDORES.ASS_ID=GS_ORCAMENTOS.ASS_ID)
LEFT JOIN GS_EVENTOS
ON (GS_EVENTOS.ORC_ID = GS_ORCAMENTOS.ORC_ID
AND GS_EVENTOS.SYS_DEL = 0 AND GS_EVENTOS.ASS_ID=100)
LEFT JOIN GS_FUNCIONARIOS
ON (GS_FUNCIONARIOS.FUN_ID = GS_ORCAMENTOS.FUN_ID
AND GS_FUNCIONARIOS.ASS_ID=GS_ORCAMENTOS.ASS_ID)
LEFT JOIN GS_ORCAMENTOS_EQUIPAMENTOS
ON (GS_ORCAMENTOS_EQUIPAMENTOS.ORC_ID = GS_ORCAMENTOS.ORC_ID
AND GS_FUNCIONARIOS.ASS_ID=GS_ORCAMENTOS.ASS_ID)
LEFT JOIN GS_EQUIPAMENTOS_APRESENTACAO
ON (GS_EQUIPAMENTOS_APRESENTACAO.EPTAPR_ID = GS_ORCAMENTOS_EQUIPAMENTOS.EQT_ID
AND GS_EQUIPAMENTOS_APRESENTACAO.ASS_ID=GS_ORCAMENTOS.ASS_ID)
LEFT JOIN GS_ORCAMENTOS_AGENDA
ON GS_ORCAMENTOS_AGENDA.ASS_ID=GS_ORCAMENTOS.ASS_ID
AND GS_ORCAMENTOS_AGENDA.ORC_ID=GS_ORCAMENTOS.ORC_ID
WHERE
GS_ORCAMENTOS.SYS_DEL = 0
AND ((GS_ORCAMENTOS.ORC_NUM=1454) or (GS_ORCAMENTOS.ORC_NUM=900))
AND GS_ORCAMENTOS.ASS_ID = 100
GROUP BY
GS_ORCAMENTOS.ORC_NUM
HAVING
MAX(GS_ORCAMENTOS_AGENDA.ORCAGE_DATA) BETWEEN '02/28/2010' AND '03/31/2010 23:59'
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)