none
Select de valor máximo parte 2 RRS feed

  • Pergunta

  • Fala galera, fiz um post anterior e quase consegui a resposta, mas ainda tô com problemas.

    Segue o post de novo e até onde consegui a solução

     

    Vou colocar um exemplo pratico de onde preciso usar essa select e vou colocar a estrutura das tabelas.

     

    Meu sistema tem 3 tabelas VEICULOS, CLIENTES e POSICOES abaixo segue a estrutura das tabelas.

     

    CREATE TABLE [dbo].[VEICULOS](

    [IDVEICULO] [int] NOT NULL,

    [PLACA] [nvarchar](8) NULL,

    [ANO] [nvarchar](4) NULL,

    [COR] [nvarchar](30) NULL,

    [IDCLIENTE] [int] NULL,

    CONSTRAINT [PK_VEICULOS] PRIMARY KEY CLUSTERED

    (

     

    CREATE TABLE [dbo].[CLIENTES](

    [IDCLIENTE] [int] NOT NULL,

    [NOME] [nvarchar](50) NULL,

    [ENDERECO] [nvarchar](50) NULL,

    [CIDADE] [nvarchar](25) NULL,

    [CEP] [nvarchar](11) NULL,

    [ESTADO] [nvarchar](2) NULL,

    [EMAIL] [nvarchar](100) NULL,

    CONSTRAINT [PK_CLIENTE] PRIMARY KEY CLUSTERED

    (

     

    CREATE TABLE [dbo].[POSICOES](

    [IDPOSICAO] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,

    [IDVEICULO] [int] NULL,

    [LOCAL] [nvarchar](10) NULL,

    [DATAATUAL] [datetime] NULL,

    [DATAEVENTO] [datetime] NULL,

    ) ON [PRIMARY]

     

    Cada cliente pode ter vários veículos, e cada veículos pode ter várias posições.

     

    Preciso selecionar a última posição de todos os veículos de um cliente por exemplo ID=27.

    A última posição é a que tiver o campo DATAEVENTO maior.

     

    Cheguei nessa query

    SELECT Q.*, POS.* FROM

    (SELECT VEC.IDVEICULO,

    MAX(DATAEVENTO) AS UltimaData

    FROM VEICULOS AS VEC

    INNER JOIN POSICOES AS POS ON VEC.IDVeiculo = POS.IDVeiculo

    WHERE VEC.IDCliente = 28

    GROUP BY VEC.IDVEICULO) AS Q

    INNER JOIN POSICOES AS POS

    ON Q.IDVeiculo = POS.IDVeiculo AND Q.UltimaData = POS.DATAEVENTO

     

    Só que com esse resultado tá retornando vários campos da tabela veículos que nâo preciso, oq preciso é do da placa da tabela veiculos e todos os campos da tabela posicoes.

    Além disso percebi que minha tabela posicoes tem registros duplicados, preciso trazer filtrando os dulicados.

     

    Como faço isso?

    Valeu.

    quinta-feira, 2 de outubro de 2008 17:30

Respostas

  • Fernando,

     

    Sobre estes campos, é o caso de você indicar no select o nome dos campos desejados ao invês de utilizar o *(asterisco).

     

    Em relação as linhas duplicadas, você poderá utilizar a claúsula Distinct no seu Select para tentar eliminar na apresentação dos dados estas linhas duplicadas.

    quinta-feira, 2 de outubro de 2008 17:34