Подзапросы в MS ACCESS: выбор только одной записи на «человека» в день - PullRequest
3 голосов
/ 19 мая 2009

Я использую таблицу, которая называется анализируется в Microsoft Access. В нем много полей, но три, которые используются для фильтрации в этом случае, анализируются .readings_miu_id, analysis.ReadDate, analysis.ReadTime. Мне нужно вытащить записи из «проанализированной» таблицы, где readings_miu_id сгруппированы вместе, затем отсортированы по ReadDate, но показаны только последняя запись за указанную дату, которая может быть самым значимым временем в ReadTime. Я создал запрос:

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);

* ???? *** используется, чтобы показать, что я не уверен, что здесь поставить

если я введу правильный readings_miu_id, я получу одну запись с наибольшим временем для этого readings_miu_id.

Как мне использовать подзапрос, подобный приведенному выше, чтобы получить только последний ReadTime для readings_miu_id для ReadDate?

readings_miu_id не идентификатор таблицы, он больше похож на номер элемента или имя

Ответы [ 2 ]

4 голосов
/ 19 мая 2009
 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);

Я просто назвал основную таблицу как A и сослался на нее в подзапросе. Не уверен, если вам нужно отфильтровать по ReadDate в вашем подзапросе.

0 голосов
/ 19 мая 2009

это приблизит вас. Утверждение «где readings_miu_id сгруппированы вместе» сбивает меня с толку. не уверен, если вы хотите GroupBy или сортировать по этому полю. Этот запрос даст вам записи из вашей проанализированной таблицы, которые имеют ту же дату, но "самое большое время" для этой данной даты. Похоже, это то, что вы хотели.

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
...