2012-11-27 25 views
13

Trong mySQL, tôi muốn trả lại tổng số hồ sơ có start_date trong năm hiện tại (như trong năm 2012, KHÔNG trong khoảng thời gian một năm) và (như một truy vấn riêng) số lượng hồ sơ từ năm trước (năm 2011 trong trường hợp hiện tại).Trả lại tất cả hồ sơ mySQL cho năm hiện tại

Ngày bắt đầu của tôi được lưu trữ như sau: 2012-12-02. Tôi đang sử dụng PHP.

Trợ giúp về cách tôi tạo thành các truy vấn này sẽ được đánh giá cao.

Trả lời

30
SELECT COUNT(*) 
FROM TABLE1 
WHERE YEAR(START_DATE) = YEAR(CURDATE()); 
+0

Cảm ơn, điều đó đã giúp tôi đi đúng hướng. – user1857692

+2

Không chắc chắn rằng đó là một quyết định tốt. Nếu bạn có chỉ mục vào ngày START_DATE, nó sẽ không hoạt động. Tốt hơn là chuẩn bị tất cả các chế phẩm ở phần bên phải của điều kiện. Một cái gì đó như thế này START_DATE> DATE_FORMAT (NOW(), '% Y-01-01 00:00:01') –

8

Bạn có thể muốn sử dụng chức năng YEAR để nhận NĂM kể từ ngày và sử dụng cùng một so sánh.

SELECT COUNT(*) 
FROM TABLE1 
WHERE YEAR(START_DATE) = 2012; 

truy vấn riêng biệt so với năm trước:

SELECT COUNT(*) 
FROM TABLE1 
WHERE YEAR(START_DATE) = 2011; 

Để có được số lượng khôn ngoan năm:

SELECT COUNT(b.YEAR), b.YEAR 
FROM TABLE1 AS a JOIN 
    (SELECT DISTINCT YEAR(START_DATE) AS YEAR from TABLE1) AS b 
    ON YEAR(START_DATE) = b.YEAR 
GROUP BY b.YEAR; 
+0

Nhưng điều đó sẽ yêu cầu tôi tự thay đổi năm hard-coded mỗi năm. Tôi muốn bit đó tự động. – user1857692

+2

'WHEAR YEAR (START_DATE) = NĂM (NGAY())' – kmfk

+0

Bạn có thể đặt 2012 hoặc 2011 trong truy vấn là một biến bên trong PHP, vì vậy nó sẽ tự động/động. – David

0

Hai gợi ý:

Bạn có thể lọc dữ liệu của bạn sử dụng ngày:

select count(*) from tbl where start_date >= '2012-01-01' 

hoặc

select count(*) from tbl where start_date between '2012-01-01' and '2012-12-31' 

Ngoài ra, bạn có thể lọc dữ liệu của bạn bằng cách sử dụng year() chức năng:

select count(*) from tbl where year(start_date) = 2012 

Hy vọng điều này sẽ giúp bạn


Nếu bạn đang sử dụng PHP (hoặc bất kỳ ngôn ngữ lập trình bậc cao khác), bạn có thể xây dựng chuỗi truy vấn của mình trên thời gian chạy để phù hợp với nhu cầu của bạn (ví dụ: Để lọc các bản ghi từ các năm khác nhau).

Để hiển thị số lượng hồ sơ với start_date trước năm 2012, chỉ cần thay đổi where điều kiện:

select... where year(start_date) < 2012 

hoặc

select... where start_date < '2012-01-01' 
Các vấn đề liên quan