2012-05-08 37 views
10

Tôi có bảng này trong Android SQLite DB của tôi:Query hôm qua, tuần trước, tháng trước SQLite

CREATE TABLE statistics (subject TEXT, hits INTEGER, fails INTEGER, date DATE) 

On date lĩnh vực được lưu trữ datetime('now', 'localtime') trong mỗi đăng ký.

Bây giờ tôi phải truy vấn ngày cuối cùng, tuần trước và đăng ký tháng trước để hiển thị một số thống kê. Tôi đã cố gắng một cái gì đó như thế này

SELECT Timestamp, datetime('now', '-1 week') FROM statistics WHERE TimeStamp < datetime('now', '-1 week') 

và điều này

SELECT * FROM statistics WHERE date BETWEEN datetime('now', localtime') AND datetime ('now', '-1 month') 

và không hoạt động :(

Làm thế nào tôi có thể làm điều đó?

Tôi có thể kiểm tra xem truy vấn là OK bằng cách chỉ chuyển tiếp ngày trong trình mô phỏng thiết bị ảo?

Cảm ơn!

+2

Dưới đây là một gợi ý. Ngày cuối cùng của tháng là -1 kể từ ngày đầu tiên của tháng tiếp theo. – JonH

+0

Cảm ơn bạn @ JonH. Tôi đã tìm thấy một giải pháp, nhưng tôi không thể đăng nó trong lúc này. Trong một số giờ tất cả các bạn sẽ có nó :) – luismiyu

Trả lời

20

Tôi đã tìm thấy giải pháp này. Tôi hy vọng nó làm việc cho bạn.

Đối với ngày cuối cùng:

SELECT * FROM statistics WHERE date BETWEEN datetime('now', 'start of day') AND datetime('now', 'localtime'); 

Đối với tuần trước:

SELECT * FROM statistics WHERE date BETWEEN datetime('now', '-6 days') AND datetime('now', 'localtime'); 

Đối với tháng trước:

SELECT * FROM statistics WHERE date BETWEEN datetime('now', 'start of month') AND datetime('now', 'localtime'); 
+0

'-6 days' mà không có không gian! Không thể chỉnh sửa nó, nó nói chỉnh sửa phải có ít nhất 6 ký tự –

+0

Trong ít nhất sqlite 3.9.1, thiếu ''localtime'' giữa'' now ',' start ... ''có thể gây ra hành vi không mong muốn. Chúng phải là 'datetime ('now', 'localtime', 'start of day')' làm ví dụ. –

0

Mã này sẽ mang theo hồ sơ tuần trước hy vọng

SELECT * FROM order_master 
WHERE strftime('%Y-%m-%d',om_date) >= date('now','-14 days') AND 
strftime('%Y-%m-%d',om_date)<=date('now') order by om_date LIMIT 6 
+1

Tuần trước hoặc trước đó * hai * tuần? –

0
SELECT 
max(date(date, 'weekday 0', '-7 day')) WeekStart, 
max(date(date, 'weekday 0', '-1 day')) WeekEnd,date 
FROM table; 
2

Mã này sẽ giúp bạn với tháng trước

SELECT * 
FROM statistics 
WHERE date >= date('now','start of month','-1 month') 
AND date < date('now','start of month') 
Các vấn đề liên quan