Выбор результатов в разных временных наборах в одном SQL-запросе - PullRequest
0 голосов
/ 10 сентября 2011

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

Возможно ли быть выбранным в одном запросе?

образцы записей включают в себя

name | added_timestamp
v | last_five_minutes
k | last_hour
l | last_hour

метки времени могут быть псевдо-фактическим временем

Ответы [ 3 ]

1 голос
/ 10 сентября 2011

Хотя вы не указали это, я подозреваю, что вам нужны итоги за различные периоды времени:

SELECT
  SUM(date_added > NOW() - INTERVAL 5 SECOND) as total_in_last_5_seconds,
  SUM(date_added > NOW() - INTERVAL 5 MINUTE) as total_in_last_5_minutes,
  SUM(date_added > NOW() - INTERVAL 5 HOUR) as total_in_last_5_hours,
  SUM(date_added > NOW() - INTERVAL 5 DAY) as total_in_last_5_days,
  SUM(date_added > NOW() - INTERVAL 5 WEEK) as total_in_last_5_weeks,
  SUM(date_added > NOW() - INTERVAL 5 MONTH) as total_in_last_5_months,
  SUM(date_added > NOW() - INTERVAL 5 YEAR) as total_in_last_5_years
from records;

Отредактировано: добавлена ​​альтернатива, предложенная комментарием

Если вы хотите фактические записи, это будет классифицировать их:

SELECT
  *,
  case
    when date_added > NOW() - INTERVAL 5 SECOND then 'last_5_seconds'
    when date_added > NOW() - INTERVAL 5 MINUTE then 'last_5_minutes'
    when date_added > NOW() - INTERVAL 5 HOUR then 'last_5_hours'
    when date_added > NOW() - INTERVAL 5 DAY then 'last_5_days'
    when date_added > NOW() - INTERVAL 5 WEEK then 'last_5_weeks'
    when date_added > NOW() - INTERVAL 5 MONTH then 'last_5_months'
    when date_added > NOW() - INTERVAL 5 YEAR then 'last_5_years'
    else 'ancient'
  end as time_category
from records;
1 голос
/ 10 сентября 2011
SELECT
  *,  /* now just don't be lazy but specify whatever columns you want to pull */
  (Timestamp >= NOW() - INTERVAL 5 SECOND) AS AddedWithinSeconds,
  (Timestamp >= NOW() - INTERVAL 5 MINUTE) AS AddedWithinMinutes,
  (Timestamp >= NOW() - INTERVAL 5 HOUR)   AS AddedWithinHours,
  (Timestamp >= NOW() - INTERVAL 5 DAY)    AS AddedWithinDays,
  (Timestamp >= NOW() - INTERVAL 5 WEEK)   AS AddedWithinWeeks,
  (Timestamp >= NOW() - INTERVAL 5 MONTH)  AS AddedWithinMonths
FROM atable
WHERE Timestamp >= NOW() - INTERVAL 5 YEAR
ORDER BY
  AddedWithinSeconds DESC,
  AddedWithinMinutes DESC,
  AddedWithinHours   DESC,
  AddedWithinDays    DESC,
  AddedWithinWeeks   DESC,
  AddedWithinMonths  DESC
0 голосов
/ 10 сентября 2011

Получить последние записи, добавленные за 5 лет:

SELECT * FROM records WHERE date_added > NOW() - INTERVAL 5 YEAR

Затем извлеките записи, добавленные за 5 секунд, 5 минут, 5 часов, 5 дней, 5 недель, 5 месяцев из результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...