Select em Datas
Tenho os seguintes dados em uma tabela:
USUARIO DT_INICIO DT_FInal
1 22/11/2004 27/11/2004
1 22/11/2004 23/11/2004
1 22/11/2004 25/11/2004
Preciso fazer uma procedure ou outro objeto que controle na minha aplicação o seguinte:
Um determinado usuário não pode ter mais de um acesso no mesmo período de datas, ou seja, se já houver um acesso na data de 22/11/2004 a 25/11/2004, não posso deixar incluir outro. Considerando os dados que estão no meu banco, com o select que criei:
SELECT count(*)
FROM TABELA V
WHERE V.usu_chave = ´1´ AND
V.dt_inicio >= TO_DATE(´22/11/2004´, ´DD/MM/YYYY´) AND
V.dt_final <= TO_DATE(´25/11/2004´, ´DD/MM/YYYY´)
consigo pegar as linhas:
1 22/11/2004 23/11/2004
1 22/11/2004 25/11/2004
mas não a primeira linha: 1 22/11/2004 27/11/2004
Como posso fazer para controlar isso? Na verdade, eu teria que ter como resultado as três linhas, pois existem acessos que começam dia 22/11/2004, mas o que está furando é que no primeiro a data_final é 27/11/2004 e é maior que a condição que coloquei.
Obrigada,
Para resolver o problema acima, fui orientada a usar o seguinte sql:
SELECT *
FROM tabela V
WHERE V.dt_inicio between ´02-NOV-2004´ AND ´11-NOV-2004´ OR
V.dt_final between ´02-NOV-2004´ AND ´11-NOV-2004´ AND
V.usu = ´1´
O que está acontecendo agora é que não está obedecendo a última condição (V.usu = ´1´). Está obedecendo às duas primeiras e condições e retornando também de outros usuários.
Já troquei a posição da condição do usuario:
SELECT *
FROM tabela V
WHERE V.usu = ´1´ and
V.dt_inicio between ´02-NOV-2004´ AND ´11-NOV-2004´ OR
V.dt_final between ´02-NOV-2004´ AND ´11-NOV-2004´
mas também não dá certo, em determinado momento, começa a exibir resultados de outros usuários, além do usuário = 1.
USUARIO DT_INICIO DT_FInal
1 22/11/2004 27/11/2004
1 22/11/2004 23/11/2004
1 22/11/2004 25/11/2004
Preciso fazer uma procedure ou outro objeto que controle na minha aplicação o seguinte:
Um determinado usuário não pode ter mais de um acesso no mesmo período de datas, ou seja, se já houver um acesso na data de 22/11/2004 a 25/11/2004, não posso deixar incluir outro. Considerando os dados que estão no meu banco, com o select que criei:
SELECT count(*)
FROM TABELA V
WHERE V.usu_chave = ´1´ AND
V.dt_inicio >= TO_DATE(´22/11/2004´, ´DD/MM/YYYY´) AND
V.dt_final <= TO_DATE(´25/11/2004´, ´DD/MM/YYYY´)
consigo pegar as linhas:
1 22/11/2004 23/11/2004
1 22/11/2004 25/11/2004
mas não a primeira linha: 1 22/11/2004 27/11/2004
Como posso fazer para controlar isso? Na verdade, eu teria que ter como resultado as três linhas, pois existem acessos que começam dia 22/11/2004, mas o que está furando é que no primeiro a data_final é 27/11/2004 e é maior que a condição que coloquei.
Obrigada,
Para resolver o problema acima, fui orientada a usar o seguinte sql:
SELECT *
FROM tabela V
WHERE V.dt_inicio between ´02-NOV-2004´ AND ´11-NOV-2004´ OR
V.dt_final between ´02-NOV-2004´ AND ´11-NOV-2004´ AND
V.usu = ´1´
O que está acontecendo agora é que não está obedecendo a última condição (V.usu = ´1´). Está obedecendo às duas primeiras e condições e retornando também de outros usuários.
Já troquei a posição da condição do usuario:
SELECT *
FROM tabela V
WHERE V.usu = ´1´ and
V.dt_inicio between ´02-NOV-2004´ AND ´11-NOV-2004´ OR
V.dt_final between ´02-NOV-2004´ AND ´11-NOV-2004´
mas também não dá certo, em determinado momento, começa a exibir resultados de outros usuários, além do usuário = 1.
Barbara.michele
Curtidas 0
Respostas
Barbara.michele
16/11/2004
Consegui obter o resultado que preciso com a seguinte query:
SELECT *
FROM tabela V
WHERE (V.USU = 1) AND
((V.dt_inicio between ´28-AGO-2004´ AND ´30-NOV-2004´) OR
(V.dt_final between ´28-AGO-2004´ AND ´30-NOV-2004´))
Coloquei essa query que faz a verificação das datas no evento OnExit da data final. Sendo que se eu tiver, por exemplo:
data inicio data final
22/11/2004 30/11/2004
e quiser alterar esse intervalo de datas para, por exemplo:
data inicio data final
22/11/2004 28/11/2004
não conseguirei pois a query vai dizer que já há acesso para o usuário nesse período, como fazer para alterar as datas para um intervalo menor do que já está gravado no banco?
SELECT *
FROM tabela V
WHERE (V.USU = 1) AND
((V.dt_inicio between ´28-AGO-2004´ AND ´30-NOV-2004´) OR
(V.dt_final between ´28-AGO-2004´ AND ´30-NOV-2004´))
Coloquei essa query que faz a verificação das datas no evento OnExit da data final. Sendo que se eu tiver, por exemplo:
data inicio data final
22/11/2004 30/11/2004
e quiser alterar esse intervalo de datas para, por exemplo:
data inicio data final
22/11/2004 28/11/2004
não conseguirei pois a query vai dizer que já há acesso para o usuário nesse período, como fazer para alterar as datas para um intervalo menor do que já está gravado no banco?
GOSTEI 0
Barbara.michele
16/11/2004
Como devo fazer p/controlar que a data da tabela 2 deve estar entre as datas de início e fim da tabela 1, se estiver = ok senão exibe msg p/usuário. Como posso fazer isso?
Tenho as seguintes tabelas:
TABELA 1 (COD(PK), DATA_INICIO, DATA_FINAL)
TABELA 2 (COD_2(PK), DATA, COD(FK))
Obrigada,
Tenho as seguintes tabelas:
TABELA 1 (COD(PK), DATA_INICIO, DATA_FINAL)
TABELA 2 (COD_2(PK), DATA, COD(FK))
Obrigada,
GOSTEI 0