GARANTIR DESCONTO

Fórum Select em Datas #258563

16/11/2004

0

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.


Barbara.michele

Barbara.michele

Responder

Posts

16/11/2004

Barbara.michele

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?


Responder

Gostei + 0

17/11/2004

Barbara.michele

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,


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar