2013-08-01 41 views
25

Bây giờ tôi đã tìm thấy rất nhiều câu hỏi SO tương tự bao gồm câu hỏi cũ của tôi, nhưng những gì tôi đang cố làm là nhận được bất kỳ bản ghi nào cũ hơn 30 ngày nhưng trường bảng của tôi unix_timestamp. Tất cả các ví dụ khác dường như sử dụng các trường DateTime hoặc một cái gì đó. Đã thử một số và không thể khiến chúng hoạt động.SQL Nhận tất cả các bản ghi cũ hơn 30 ngày

Điều này chắc chắn không hoạt động bên dưới. Ngoài ra tôi không muốn có một ngày giữa một ngày giữa, tôi muốn tất cả các hồ sơ sau 30 ngày từ một dấu thời gian unix được lưu trữ trong cơ sở dữ liệu. Tôi đang cố gắng thu hút người dùng không hoạt động.

ví dụ đơn giản .. không hoạt động.

SELECT * from profiles WHERE last_login < UNIX_TIMESTAMP(NOW(), INTERVAL 30 DAY) 

Và cố gắng này

SELECT * from profiles WHERE UNIX_TIMESTAMP(last_login - INTERVAL 30 DAY) 

Không quá mạnh tại các truy vấn ngày phức tạp. Bất kỳ trợ giúp được đánh giá cao.

Mặc dù câu hỏi đã được chấp nhận. Tôi không thích kích hoạt người hạnh phúc đóng câu hỏi như là một bản sao. Rõ ràng nó không phải là một bản sao bởi vì tôi đã không hỏi những gì thay thế cho các chức năng mysql là. Tôi hỏi chính xác làm thế nào để có được hồ sơ cũ hơn 30 ngày và câu hỏi trùng lặp đó không trả lời điều đó hoặc thậm chí chỉ cho tôi làm thế nào để có được nó. Tôi nghĩ mọi người cần đọc các câu hỏi.

+0

Postgresql có chức năng UNIX_TIMESTAMP không? –

+0

Không chắc chắn .. đó có thể là lý do tại sao nó không hoạt động .. lol –

Trả lời

50

Hãy thử một cái gì đó như:

SELECT * from profiles WHERE to_timestamp(last_login) < NOW() - INTERVAL '30 days' 

Trích dẫn từ hướng dẫn:

Một đơn hàm to_timestamp đối số cũng có sẵn; nó chấp nhận một đối số chính xác kép và chuyển đổi từ thời đại Unix (giây từ 1970-01-01 00: 00: 00 + 00) thành dấu thời gian với múi giờ. (Kỷ nguyên Integer Unix được ngầm đúc đến độ chính xác gấp đôi.)

+0

Tôi thực sự có nó để làm việc bằng cách sử dụng '

+0

Nó sẽ là tốt để cung cấp một liên kết trực tiếp đến nguồn của bạn, phần cụ thể của hướng dẫn sử dụng. – Relequestual

11

Trừ khi tôi đã bỏ lỡ một cái gì đó, điều này nên được khá dễ dàng:

SELECT * FROM profiles WHERE last_login < NOW() - INTERVAL '30 days'; 
+0

Không .. điều này dẫn đến lỗi truyền kiểu. –

+0

@Pjack: ah, vì vậy tôi đã bỏ lỡ điều gì đó. Loại 'last_login' là gì? Tôi cho rằng đó là 'TIMESTAMP' mà rõ ràng là không. –

+0

Cột là một bigint –

Các vấn đề liên quan