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

diHITT - Notícias