2011-07-13 31 views
11

Tôi có một báo cáo được dẫn dắt bởi một truy vấn sql trông như thế này:Làm cách nào để chọn hai tuần trước trong MYSQL?

SELECT batch_log.userid, 
     batches.operation_id, 
     SUM(TIME_TO_SEC(ramses.batch_log.time_elapsed)), 
     SUM(ramses.tasks.estimated_nonrecurring + ramses.tasks.estimated_recurring), 
     DATE(start_time) 
    FROM batch_log 
    JOIN batches ON batch_log.batch_id=batches.id 
    JOIN ramses.tasks ON ramses.batch_log.batch_id=ramses.tasks.batch_id 
    JOIN protocase.tblusers on ramses.batch_log.userid = protocase.tblusers.userid 
    WHERE DATE(ramses.batch_log.start_time) > "2011-02-01" 
    AND ramses.batch_log.time_elapsed > "00:03:00" 
    AND DATE(ramses.batch_log.start_time) < now() 
    AND protocase.tblusers.active = 1 
    AND protocase.tblusers.userid NOT in ("ksnow","smanning", "dstapleton") 
GROUP BY userid, batches.operation_id, date(start_time) 
ORDER BY start_time, userid ASC 

Do đây là để được so sánh với thời gian từ payperiod hiện tại nó gây ra một lỗi.
Thời gian trả tiền của chúng tôi bắt đầu vào Chủ Nhật, giai đoạn thanh toán đầu tiên là 2011-02-01 và thời gian thanh toán cuối cùng của chúng tôi bắt đầu vào ngày 4 của tháng này. Làm thế nào để tôi đưa câu trả lời đó vào vị trí của tôi để loại bỏ giai đoạn thanh toán gần đây nhất khỏi truy vấn?

EDIT: Vì vậy, bây giờ tôi đang sử dụng date_sub (now(), INTERVAL 2 WEEK) nhưng tôi thực sự cần một ngày cụ thể trong tuần (SUNDAY) vì ngày thứ tư nó cắt nó vào thứ tư.

+4

Kiểm tra [chức năng ngày và giờ của MySQL] (http://dev.mysql.com/doc/refman/5.5/en/ date-and-time-functions.html), cụ thể là DATE_SUB() –

Trả lời

27

Bạn muốn sử dụng DATE_SUB và làm an example.

Cụ thể:

select DATE_SUB(curdate(), INTERVAL 2 WEEK) 

giúp bạn cách đây hai tuần. Chèn phần DATE_SUB ... vào sql của bạn và bạn tốt để đi.

Sửa mỗi bình luận của bạn:

Check-out DAYOFWEEK:

và bạn có thể làm một cái gì đó dọc theo dòng:

DATE_SUB(DATE_SUB(curdate(), INTERVAL 2 WEEK), INTERVAL 2 + DAYOFWEEK(curdate()) DAY) 

(Tôi không có một trường hợp MySql để kiểm tra nó trên .. nhưng về cơ bản trừ số ngày sau thứ Hai.)

2

Câu hỏi không rõ ràng lắm, đặc biệt là sau khi chỉnh sửa - không rõ ràng bây giờ là "khoảng thời gian thanh toán" dài hai tuần hoặc d o bạn muốn chỉ hai tuần trở lại từ chủ nhật trước? Tôi cho rằng giai đoạn này là hai tuần ... thì trước tiên bạn cần phải biết bao nhiêu ngày giai đoạn mới nhất (mà bạn muốn bỏ qua, vì nó chưa kết thúc) đã xảy ra. Để nhận được rằng số ngày bạn có thể sử dụng biểu như

DATEDIFF(today, FirstPeriod) % 14 

nơi FirstPeriod2011-02-01. Và bây giờ bạn tách số ngày đó khỏi ngày hiện tại trong truy vấn bằng cách sử dụng date_sub(). Biểu thức chính xác phụ thuộc vào khoảng thời gian được xác định như thế nào nhưng bạn nên có ý tưởng ...

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