Subconsultas em MS ACCESS: selecionando apenas um registro por "pessoa" por data

votos
3

Eu estou usando uma tabela chamada analisados ​​no Microsoft Access. Ele tem muitos campos, mas os três que estão sendo utilizados para filtrar, neste caso, são analyzed.readings_miu_id, analyzed.ReadDate, analyzed.ReadTime. Eu preciso puxar os registros da tabela analisados, onde readings_miu_id são agrupados em seguida, classificado por ReadDate mas mostrando apenas a última entrada referida data que poderia ser o maior tempo valorizado em ReadTime para. Eu criei uma consulta:

SELECT readings_miu_id, Reading, ReadDate, ReadTime, 
    MIUwindow, SN, Noise, RSSI, OriginCol, ColID, Ownage
FROM analyzed
WHERE analyzed.ReadDate Between #4/21/2009# and #4/29/2009#  
AND analyzed.ReadTime= ( 
    SELECT TOP 1 analyzed.ReadTime 
    FROM analyzed 
    WHERE analyzed.readings_miu_id = *????*** 
    ORDER BY analyzed.ReadTime DESC);

* ???? *** está sendo usado para mostrar que eu não tenho certeza o que colocar aqui

se eu entrar em um readings_miu_id válida i obter um recorde com o maior tempo para isso readings_miu_id.

Como faço para usar um sub consulta como o descrito acima para puxar apenas o último ReadTime per readings_miu_id per ReadDate?

readings_miu_id não é o ID da tabela, é mais semelhante a um número do item ou um nome

Publicado 19/05/2009 em 16:16
fonte usuário
Em outras línguas...                            


2 respostas

votos
4

 SELECT readings_miu_id
    , Reading , ReadDate , ReadTime
    , MIUwindow, SN, Noise, RSSI
    , OriginCol, ColID, Ownage 
 FROM analyzed AS A
    WHERE analyzed.ReadDate Between #4/21/2009# and #4/29/2009# 
       AND analyzed.ReadTime=
          (SELECT TOP 1 analyzed.ReadTime FROM analyzed 
             where analyzed.readings_miu_id = A.readings_miu_id 
                AND analyzed.ReadDate = A.ReadDate
             ORDER BY analyzed.ReadTime DESC);

Eu só alias a tabela principal como A e apenas referiu a ele na subconsulta. Não tenho certeza se você precisar filtrar por ReadDate em sua subconsulta.

Respondeu 19/05/2009 em 16:35
fonte usuário

votos
0

isso vai te perto. A afirmação "onde readings_miu_id são agrupados" está me confundindo. não tenho certeza se você quer um GroupBy ou uma espécie nesse campo. Esta consulta vai dar youthe registros de sua mesa analisados ​​que têm a mesma data, mas o "maior:" o tempo que determinada data. Parece que é o que você queria.

SELECT readings_miu_id, Reading, ReadDate, ReadTime, MIUwindow, SN, Noise, RSSI, OriginCol, ColID, Ownage 
FROM analyzed ,
(
  Select ReadDate as matchDate, Max(ReadTime) as matchTime
  FROM analyzed 
  Where analyzed.ReadDate Between #4/21/2009# and #4/29/2009# 
  Group by ReadDate
) dateAndTime
WHERE analyzed.ReadDate Between #4/21/2009# and #4/29/2009# AND ReadDate = dateAndTime.matchDate AND readTime = dateAndTime.matchTime  
Order By readDate
Respondeu 19/05/2009 em 16:31
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more