Dúvida SQL - order by

Não sei se aqui é o melhor lugar, mas

Tem uma tabela no sql q tem data e o turno(manha, tarde ou noite), só q eu tenho q q fazer uma consulta q ordene pela data e pelo turno. alguém sabe como fazer? só q o campo data tá como date e o turno varchar.

Por padrão ele ordena em ordem crescente para ordenar de forma descrescente basta adicionar a palavra DESC

[code]select * from tabela order by data, turno DESC[/code]

Por padrão ele ordena em ordem crescente para ordenar de forma descrescente basta adicionar a palavra DESC

você trabalhando com Date no BD e fazendo order by pelo campo data ele já não pega os registro ordenados?

Acho que não entedi direito o que você deseja.

poste mais alguma informação ai pra ver se consigo ajudar em algo.

Consegue me dizer os campos e as tabelas??

xD~~

era o que foi postado acima que você deseja?

vou dar 1 exemplo:

tenho esses 4 registros gravados:

id,nome, data, turno

  1, fulano, 04/01/2010,noite
  2, ciclano, 04/01/2010, tarde
  3, beltrano, 04/01/2010, manha
  4, outrano, 05/01/2010, noite

eu queria ordernar pela data e o turno, só q com o turno em 1 ordem específica, 1° manhã, 2° tarde e 3° noite

ae ficaria assim:

  3, beltrano, 04/01/2010, manha
  2, ciclano, 04/01/2010, tarde
  1, fulano, 04/01/2010,noite
  4, outrano, 05/01/2010, noite

Ele usa a ordem natural dos dados das colunas.

Você pode tentar o seguinte caso esteja usando oracle

select nome, data, turno, decode(turno, 'manha', 1, 'tarde', 2, 'noite', 3) a from tabela order by a, data

ou pode pesquisar algo parecido no seu banco.

Uma outra alternativa é tentar ordenar isso no java, mas daí fica oneroso para o server

O código abaixo é o que você quer!

[quote=thiago.correa]select * from tabela order by data, turno
Por padrão ele ordena em ordem crescente para ordenar de forma descrescente basta adicionar a palavra DESC

po, eu to usando o sql server, tem algo parecido com o q vc citou acima ou será que funciona lá?

Dá uma conferida na documentação do teu servidor de banco de dados, é bem provavel que sim, só não garanto que seja com o mesmo nome!!!

[quote=Alberes]O código abaixo é o que você quer!

[quote=thiago.correa]select * from tabela order by data, turno
Por padrão ele ordena em ordem crescente para ordenar de forma descrescente basta adicionar a palavra DESC

Alberes, não pq assim o turno não ficaria ordernado por manhã, tarde e noite e sim por ordem alfabética ascendente ou descendente…

Vlw cara, vou dar uma procurada por isso, já é um caminho a se seguir. Obrigado

Consegui, no sql server tem case q funciona semelhante ao decode do oracle. só pra postar a resposta aqui caso alguém no futuro venha precisar vou mostrar como ficou:

select id,nome, data, turno, (case When turno ='Manhã' then 1 When turno ='Tarde' Then 2 When turno ='Noite' then 3) as ordem from tabela order by data asc, ordem asc

Obrigado ae galera do GUJ!

Entendi.

Não tenho mysql para testar, mas você pode fazer algo assim.

SELECT
    nome, data, turno, SUBSTRING(a FROM 3)
    (select nome, data, turno, decode(turno, '1 manha', 1, '2 tarde', 2, '3 noite', 3) a from tabela order by a, data)
FROM tabela

A minha dúvida é essa função decode, não conheço, mas de qualquer forma tem uma outras funções.

Link com as funções para strings

http://www.tutorialspoint.com/mysql/mysql-string-functions.htm

Segue a query que resolverá o seu problema:

select * from tabela
order by data,case turno when ‘manha’ then 1 when ‘tarde’ then 2 when ‘noite’ then 3 end