ЗАКАЗАТЬ по количеству записей с отметкой времени <24 часов (MySQL) - PullRequest
0 голосов
/ 18 октября 2010

У меня есть таблица, полная записей с отметками времени DATETIME и поле идентификатора. Я хочу сделать запрос MySQL (в моем сценарии PHP), который выбирает из другой таблицы с соответствующим идентификатором. Я хочу сделать какое-то объединение, которое будет сортировать по количеству записей в первой таблице с отметкой времени более поздней, чем 24 часа. Таким образом, в основном, если в первой таблице 30 записей с отметкой времени менее 24 часов с идентификатором «334», я хочу выбрать строку из второй таблицы с идентификатором 334. И это должно предшествовать записи с идентификатором «234», который имеет только 20 записей за последние 24 часа.

Надеюсь, это понятно ... Я действительно ошеломлен, как это сделать, так что спасибо за любую помощь. : D

Ответы [ 2 ]

2 голосов
/ 18 октября 2010

Использование:

  SELECT a.*, 
         x.num
    FROM TABLE_A a
    JOIN (SELECT t.id,
                 COUNT(*) AS num
            FROM TABLE_B t
           WHERE t.timestamp BETWEEN DATE_SUB(NOW, INTERVAL 1 DAY)
                                 AND NOW()
        GROUP BY t.id) x ON x.id = a.id
ORDER BY x.num DESC
0 голосов
/ 18 октября 2010

Попробуйте:

Select b.ColA, b.ColB, b.ColC,-- etc.
  Count(*) count
From TableB b 
   Join TableA a
     On a.Id = b.Id
        And a.TimeStamp > getDate() - 1
Group By b.ColA, b.ColB, b.ColC -- etc.
Order By Count(*) Desc

Если вы также хотите увидеть строки из Таблицы B, которые не имеют временных отметок за последние 24 часа, используйте внешнее соединение:

 Select b.ColA, b.ColB, b.ColC,-- etc.
  Count(*) count
 From TableB b 
   Left Join TableA a
     On a.Id = b.Id
        And a.TimeStamp > getDate() - 1
 Group By b.ColA, b.ColB, b.ColC -- etc.
 Order By Count(*) Desc
...