2011-04-12 3 views
0

내 애플리케이션에 사용자가 데이터베이스에 레코드를 입력했습니다. 레코드에는 자동 증가 ID, 날짜 (mm-dd-yyyy 형식의 텍스트), 수량 (int) 및 기타 몇 가지 필드가 포함됩니다.월의 모든 요일에 대해 월과 액을 선택하십시오.

저는 매달 모든 달과 합계 금액을 매달려고합니다. 그래서 내 애플 리케이션에 표시 할 수 있습니다 : 2010 년 12 월 - 90qty, 2011 년 1 월 - 45qty ...

내가 지금하고있는 것은 ID로 날짜 선택, 오름차순 1 및 내림차순 1 데이터베이스의 첫 번째 날짜와 마지막 날짜입니다. 그런 다음 개월과 월을 나누고 거기에 몇 개월이 있는지 계산 한 다음 for 루프를 수행하고 배열을 채우기 때문에 12-2010, 01-2011, 02-2011 ... 등의 쿼리 루프가 있습니다. 날짜가 12-01-2011과 12-31-2011 사이의 합계 (수량)에 대한 데이터베이스입니다.

더 좋은 방법이 있습니까?

+0

이상적 SQLite는의 날짜가 [ISO8601]에 저장한다 (http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/date_and_time_format.htm) 형식 (YYYY-MM-DD)를 사용하여 날짜 기능을 쉽게 사용할 수 있습니다. – MPelletier

답변

2
CREATE TABLE test (
id integer primary key, date date, quantity integer); 
INSERT INTO "test" VALUES(1,'2011-01-01',5); 
INSERT INTO "test" VALUES(2,'2011-02-01',13); 
INSERT INTO "test" VALUES(3,'2011-02-12',14); 
INSERT INTO "test" VALUES(4,'2011-03-01',133); 

개월에 의해이 같은 양을 요약 : 그것은 DATETIME을 만약 당신이 이런 식으로 뭔가를 할 수 있습니다.

select strftime('%Y-%m', date), sum(quantity) 
from test 
group by strftime('%Y-%m', date); 

2011-01 5 
2011-02 27 
2011-03 133 
1

데이터베이스에서 원하는 입도로 날짜를 좁힐 수 있다면 쿼리 한 번으로 결과를 반복 할 수 있습니다. 귀하의 data 컬럼이 어떤 필드 유형인지에 따라 다릅니다. 예를 들어 VARCHAR 인 경우 SUBSTRING을 사용하여 원하는 부분 (연도 및 월)을 선택할 수 있습니다.

를 그룹화 할 수
SELECT strftime(date, '%m-%Y'), SUM(quantity) 
FROM table GROUP BY strftime(date, '%m-%Y') 
+0

SQLite는'DATE_FORMAT' 함수를 가지고 있지 않습니다. 'strftime ('% m- % Y')'를 사용하십시오. – MPelletier

+0

@MPelletier 아 감사합니다. 답변을 업데이트했습니다. 나는 어떤 이유로 MySQL을 생각하고 있었고 SQLite 태그를 훑어 보았습니다. – WhiteFang34

관련 문제