Як вибрати записи за останні 24 години за допомогою SQL?


185

Я шукаю пункт, за допомогою whereякого можна отримати записи за останні 24 години?


1
Чи є у вас записи поля часової позначки на цих записах?
Шон Стюард

Відповіді:


101
SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)

6
Якщо записи зберігаються як DATETIME, це вибере всі записи з попередньої дати, не враховуючи часової частини. Після запуску 23:59:59запит повертає всі записи за останні 48години, не 24.
Quassnoi

18
Якщо ви хочете вибрати останні 24 години з поля дати, замініть "curate ()" на "now ()". Сюди також входить час.
Haentz

564

В MySQL:

SELECT  *
FROM    mytable
WHERE   record_date >= NOW() - INTERVAL 1 DAY

В SQL Server:

SELECT  *
FROM    mytable
WHERE   record_date >= DATEADD(day, -1, GETDATE())

В Oracle:

SELECT  *
FROM    mytable
WHERE   record_date >= SYSDATE - 1

В PostgreSQL:

SELECT  *
FROM    mytable
WHERE   record_date >= NOW() - '1 day'::INTERVAL

В Redshift:

SELECT  *
FROM    mytable
WHERE   record_date >= GETDATE() - '1 day'::INTERVAL

В SQLite:

SELECT  *
FROM    mytable
WHERE   record_date >= datetime('now','-1 day')

В MS Access:

SELECT  *
FROM    mytable
WHERE   record_date >= (Now - 1)

3
Я намагаюся отримати запит на mysql, але якщо його 2:00, наприклад, я отримую записи з 00 - 02 ранку. Дві години лише замість 24. Будь-які ідеї?
Манос

Мені дуже подобається рішення, що надається тут, саме те, що я зазначив у MySQL, - це швидкість виконання рішення Гійома Фландра .
oneworld

1
У Amazon Redshift я потрапляю function getdate() does not exist. Замінив його, current_dateі він справно працював.
FloatingRock

1
Ця відповідь змушує мене хотіти, щоб була кнопка "зірка", оскільки я хочу це зробити закладкою.
Brian Risk

1
@Manos У MySQL схоже, CURDATE()що не повертає дату з часовим відрізком, тому вона переходить до 00. Я виправив це за допомогою, NOW()а не CURDATE().
4касл

21

MySQL:

SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 24 HOUR)

ІНТЕРВАЛ може бути у РОКІ, МІСЯЦІ, ДНІ, ГОДИНІ, МИНУТІ, ДРУГОМ

Наприклад, за останні 10 хвилин

SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)

3
Це відповідь, яка найкраще відповідає на конкретне запитання: Як повернути ПЕРЕДБАЧЕННУ 24 ГОДИНИ (з теперішнього моменту), на відміну від попередніх 24 (який пропонує всі результати за попередній день). Це відповіло моїм вимогам, це отримало мою оцінку. EDIT: Слід згадати стовпчик_name.the_date повинен бути часовою позначкою.
Ентоні Креган

8

Який SQL не вказано, SQL 2005/2008

SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate())

Якщо ви використовуєте типи дат із підвищеною точністю у 2008 році, замість цього використовуйте нову функцію sysdatetime (), однаково, якщо використовуєте внутрішнє значення UTC на внутрішній обмін на дзвінки UTC.


7

у postgres, якщо припустити, що тип поля є часовою позначкою:

виберіть * з таблиці, де дата_ поле> (зараз () - інтервал '24 години');


4

Якщо часова марка вважається часовою міткою UNIX, потрібно спочатку перетворити часову марку UNIX (наприклад, 1462567865) в часову позначку або дані mysql

SELECT * FROM `orders` WHERE FROM_UNIXTIME(order_ts) > DATE_SUB(CURDATE(), INTERVAL 1 DAY)

Це припущення, що двигун, який використовується, є MySQL, оскільки FROM_UNIXTIME () є функцією MySQL. Для використання SQL Server: SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) Якщо вам потрібна точність мілісекунд у SQL Server 2016 та пізніші версії: SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
luisdev


2

Привіт, зараз я минув багато часу від початкового поста, але у мене була подібна проблема, і я хочу поділитися.

У мене з’явилося поле дати в такому форматі РРРР-ММ-ДД год. Год .: мм: с, і я хочу отримати доступ цілий день, тому ось моє рішення.

Функція DATE (), в MySQL: Витягнути частину дати в виразі дати або дати.

SELECT * FROM `your_table` WHERE DATE(`your_datatime_field`)='2017-10-09'

з цим я отримую весь реєстр рядків в цей день.

Я сподіваюся, що допоможе комусь.


Це єдиний, хто працював для мене на mySQL. Чомусь, коли я спробував SELECT * FROM myTable WHERE myDate> DATE_SUB ('2018-06-13 00:00:00', INTERVAL 24 HOUR); Я все ще отримував записи з 2018-06-14.
jDub9


1

У SQL Server (протягом останніх 24 годин):

SELECT  *
FROM    mytable
WHERE   order_date > DateAdd(DAY, -1, GETDATE()) and order_date<=GETDATE()

2
навіщо вам потрібно додати "і order_date <= GETDATE ()", коли ви вже шукаєте останні 24 години з моменту виконання цього запиту? Дійсно не має сенсу брати цю частину в пункті де, коли у вас є "GETDATE", що згадується в першому. Ви краще зробіть це "order_date> = DateAdd (DAY, -1, GETDATE ())" thats it!
KMX
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.