วิธีการเลือกระเบียนจาก 24 ชั่วโมงล่าสุดโดยใช้ SQL


185

ฉันกำลังมองหาส่วนwhereคำสั่งที่สามารถใช้เพื่อดึงข้อมูลระเบียนในช่วง 24 ชั่วโมงที่ผ่านมาหรือไม่


1
คุณมีฟิลด์บันทึกเวลาบนบันทึกเหล่านี้หรือไม่
Shawn Steward

คำตอบ:


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 ชั่วโมงล่าสุดจากฟิลด์ datetime ให้แทนที่ '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 แต่ถ้าเป็น 02:00 ฉันจะได้รับการบันทึกจาก 00 - 02:00 สองชั่วโมงเท่านั้นแทนที่จะเป็น 24. มีความคิดเห็นอะไรบ้าง?
Manos

ฉันชอบโซลูชันที่ให้ไว้ที่นี่สิ่งที่ฉันสังเกตเห็นใน MySQL คือประสิทธิภาพของโซลูชันGuillaume Flandreเร็วขึ้น
oneworld

1
ใน Amazon Redshift function getdate() does not existฉันได้รับ แทนที่ด้วยcurrent_dateและทำงานได้ดี
FloatingRock

1
คำตอบนี้ทำให้ฉันหวังว่าจะมีปุ่ม "ดาว" เพราะฉันต้องการคั่นหน้านี้
Brian Risk

1
@Manos ใน MySQL ดูเหมือนว่าจะไม่กลับมาวันที่มีส่วนเวลาดังนั้นมันจะไปCURDATE() 00ฉันคงได้โดยใช้แทนNOW() CURDATE()
4castle

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 ก่อนหน้า (ซึ่งแสดงผลลัพธ์ทั้งหมดสำหรับวันก่อนหน้า) นี้ตอบสนองความต้องการของฉันนี้ได้รับ upvote ของฉัน แก้ไข: มันควรค่าแก่การกล่าวถึงคอลัมน์ table_name.the_date ควรเป็นเวลาประทับ
Anthony Cregan

8

ไม่ได้ระบุ SQL ตัวใด SQL 2005/2008

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

หากคุณอยู่ในประเภทวันที่ความแม่นยำที่เพิ่มขึ้นของปี 2008 ให้ใช้ฟังก์ชัน sysdatetime () ใหม่แทนหากใช้ UTC เวลาภายในเป็นการสลับไปยังการโทร UTC ภายใน


7

ใน postgres สมมติว่าประเภทเขตข้อมูลของคุณเป็นเวลา:

เลือก * จากตารางที่ date_field> (ตอนนี้ () - ช่วงเวลา '24 ชั่วโมง ');


4

หากการประทับเวลาที่พิจารณาคือการประทับเวลา UNIX คุณต้องแปลงการประทับเวลา UNIX ครั้งแรก (เช่น 1462567865) เป็น mysql timestamp หรือข้อมูล

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

สวัสดีตอนนี้ฉันผ่านเวลามากจากโพสต์ต้นฉบับ แต่ฉันมีปัญหาที่คล้ายกันและฉันต้องการแบ่งปัน

ฉันมีเขตข้อมูลวันที่ในรูปแบบนี้ YYYY-MM-DD hh: mm: ss และฉันต้องการเข้าถึงทั้งวันดังนั้นนี่คือวิธีแก้ปัญหาของฉัน

ฟังก์ชั่น DATE () ใน MySQL: แยกส่วนวันที่ของการแสดงออกวันที่หรือวันที่และเวลา

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

ด้วยสิ่งนี้ฉันได้รับการลงทะเบียนแถวทั้งหมดในวันนี้

ฉันหวังว่ามันจะช่วยให้ทุกคน


นี่เป็นสิ่งเดียวที่ทำงานกับฉันใน mySQL ด้วยเหตุผลบางอย่างเมื่อฉันลองเลือก * จาก myTable WHERE myDate> DATE_SUB ('2018-06-13 00:00:00' ช่วงเวลา 24 ชั่วโมง); ฉันยังคงได้รับการบันทึกจาก 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 ())" นั่นดีกว่า!
KMX
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.