Views

Important:

Quaisquer necessidades de soluções e/ou desenvolvimento de aplicações pessoais/profissionais, que não constem neste Blog podem ser tratados como consultoria freelance à parte.

...

1 de maio de 2012

SQL Access - Selecionando registros especificados dentro de um período - Select specified amount of rows older than specified datetime



Construir scripts SQL é uma arte aliada a um bom conhecimento técnico. De vez em quando é bom nos aprofundarmos um pouco mais sobre as limitações e alcance do comandos e cláusulas SQL. Por exemplo, é bom saber que:

Há um limite no número de ANDs que você pode usar em uma instrução SQL SELECT não documentado. O limite é 99 ANDs e numa cláusula WHERE é de 99 ANDs em uma cláusula HAVING

Microsoft Access retornará as seguintes mensagens de erro quando exceder esse limite: 
Expressão muito complexa
- ou -
Consulta é muito complexa.

O erro também pode ocorrer se a consulta incluir uma expressão de função Switch() que contenha mais de 13 conjuntos de argumento. A solução alternativa é criar uma função definida pelo usuário (UDF) que incorpore a instrução Select Case e chamá-la da consulta.

Existem processos que precisam estar submetidos a períodos como datas e horários. Também é necessário submetê-los a um ranking e etc... Como podemos efetuar essas cláusulas em tabelas, de modo que fiquem condicionados aos períodos, horários e de um modo ranqueado? O modo como escrevemos o nosso código SQL é que definirá o retorno da nossa consulta. Por isso demonstro algumas técnicas de como isso pode ser feito (Divirtam-se):

' Este código retorna todos os emails cadastrados numa tabela chamada
"Mails" , cujo o campo "timeReceived" (que registrou a gravação dos
' registros) tenha ocorrência com o período inferior a '2012-04-28 08:53:00'.
 
"SELECT * FROM ( SELECT * FROM Mails WHERE (timeReceived < '2012-04-28 08:53:00' ) )";
 
Este código retorna todos os emails cadastrados numa tabela chamada
"Mails" , cujo o campo "timeReceived" (que registrou a gravação dos
' registros) tenha ocorrência com o período igual a '2012-04-28 08:53:00'. 
' Ordenando o resultado pela coluna timeReceived em ordem descendente.

"SELECT * FROM Mails WHERE (timeReceived =  '2012-04-28 08:53:00' ) ORDER BY timeReceived DESC";

Este código retorna todos os 30 primeiros emails cadastrados na tabela
"Mails", cujo o campo "timeReceived" (que registrou a gravação dos
registros) tenham ocorrência com o período inferior a '2012-04-28 08:53:00'.
Ordenando o resultado pela coluna timeReceived em ordem descendente.

SELECT TOP 30 * FROM Mails WHERE timeReceived  < '2012-04-28 08:53:00'  ORDER BY timeReceived DESC

Este código retorna todos os 25 primeiros emails cadastrados na tabela
"Students", cujo o campo "GraduationYeartenham ocorrência com o período
' igual a '2012'Ordenando o resultado pela coluna GradePointAverage em
' ordem descendente.

SELECT TOP 25
FirstName, LastName
FROM Students
WHERE GraduationYear = 2003
ORDER BY GradePointAverage DESC

Este código retorna todos os 30 primeiros emails cadastrados na tabela
"Mails", cujo o campo "timeReceived" seja inferior a '2012-04-28 08:53:00'.
Ordenando o resultado pela coluna GTimeReceived em ordem descendente e
Ordenando a coluna MailID em ordem crescente

SELECT TOP 30 *
FROM Mails
WHERE timeReceived < '2012-04-28 08:53:00'
ORDER BY timeReceived DESC, MailID ASC
   
Este código retorna todos os 30 primeiros emails cadastrados na tabela
' "Mails", cujo o campo "timeReceived" seja inferior a '2012-04-28 08:53:00'.
Ordenando o resultado da coluna GTimeReceived em ordem descendente

SELECT top 30 *
FROM Mails
WHERE timeReceived < '2012-04-28 08:53:00'
ORDER BY timeReceived desc
Reference::
http://office.microsoft.com/en-us/ac...313511033.aspx
http://office.microsoft.com/en-us/ac...314971033.aspx

Tags: SQL, Access, Top, descend, ANDs, AND, HAVING, SELECT, DESC, ASC, UDF

Inline image 1

Nenhum comentário:

Postar um comentário

eBooks VBA na AMAZOM.com.br

Vitrine