2009-05-19 2 views
3

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

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 за чтение_miu_id в ReadDate?

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

+0

Так может кто-то сказать мне, почему я проголосовал? Есть ли проблема с моим вопросом или кто-то просто пытается получить значок «Критик»? – Bryan

ответ

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

Я просто псевдонимы основной таблицы, как А и просто refered к нему в подзапросе. Не уверен, что вам нужно фильтровать ReadDate в вашем подзапросе.

+0

вот что я искал спасибо. я не знал, что вы можете создать копию таблицы, подобную этой, чтобы перекрестно ссылаться на строку, на которую смотрит sql. Спасибо – Bryan

+0

+1 Хороший вопрос в конце концов :) – Andomar

+0

Получил небольшую помощь от моих друзей. – JeffO

0

это поможет вам закрыть. Заявление «где 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 
+0

Я думаю, что Top 1 должен позаботиться о том, чтобы получить последнюю версию. – JeffO

+0

В max() здесь вы получите одну строку в группе ReadDate. – Andomar

+0

Тогда ему просто нужно включить ReadDate в предложение where подзапроса. – JeffO

 Смежные вопросы

  • Нет связанных вопросов^_^