Fórum Select em Datas #258563
16/11/2004
0
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
Curtir tópico
+ 0Posts
16/11/2004
Barbara.michele
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
17/11/2004
Barbara.michele
Tenho as seguintes tabelas:
TABELA 1 (COD(PK), DATA_INICIO, DATA_FINAL)
TABELA 2 (COD_2(PK), DATA, COD(FK))
Obrigada,
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)