2010-04-28 3 views
2

sql/sqlite 질문이 있습니다. 나는 sqlite 데이터베이스 테이블에서 일부 값을 선택하는 쿼리를 작성해야한다. 나는 항상 최대 반환 레코드가 20이되기를 원합니다. 선택된 전체 레코드가 20보다 큰 경우 전체 레코드에 균등하게 (무작위로) 퍼져있는 20 개의 레코드를 선택해야합니다. 또한 날짜별로 정렬 할 때 항상 테이블의 첫 번째 값과 마지막 값을 선택하는 것이 중요합니다. 이 레코드는 결과의 처음과 마지막에 삽입해야합니다.Sqlite : 전체 레코드에 걸친 레코드 선택

나는 이것을 코드에서 수행하는 방법을 알고 있지만, 같은 것을 할 수있는 sqlite 쿼리를 갖는 것이 가장 좋습니다.

현재 사용 쿼리 임은 정말 간단하고 다음과 같습니다

"SELECT value,date,valueid FROM tblvalue WHERE tblvalue.deleted=0 ORDER BY DATE(date)" 

내가 예를 들어 이러한 기록하는 그 커다란에서 내가 할 최대 결과는 5

입니다 쉽게 예를 만드는 경우
id value date 
1  10  2010-04-10 
2  8  2010-04-11 
3  8  2010-04-13 
4  9  2010-04-15 
5  10  2010-04-16 
6  9  2010-04-17 
7  8  2010-04-18 
8  11  2010-04-19 
9  9  2010-04-20 
10 10  2010-04-24 

I는 다음과 같이 균일하게 확산되고 싶은 그 결과, 전자가

id value date 
1  10  2010-04-10 
3  8  2010-04-13 
5  10  2010-04-16 
7  8  2010-04-18 
10 10  2010-04-24 

희망 고맙습니다.

이 같은
SELECT value,date,valueid FROM tblvalue WHERE tblvalue.deleted=0 
ORDER BY DATE(date), Random() 
LIMIT 20 
+0

당신은 내가 전체 기록에 걸쳐 20 개 개의 레코드를 선택해야합니다 "가 무슨 뜻 이죠 "? – SQLighter

+1

그는 무작위로 배열 된 것을 의미한다고 생각합니다. 즉, 임의의 요소로 정렬했습니다. –

+0

죄송합니다. 분명치 않다. 무작위로 싶지는 않습니다. 위의 업데이트 된 질문을 참조하십시오. 감사! – Mrbiggerm

답변

0

난 당신이 원하는 생각

SELECT * 
FROM (
    SELECT v.value, v.date, v.valueid 
    FROM tblvalue v 
    LEFT OUTER JOIN (
     SELECT min(DATE(date)) as MinDate, max(DATE(date)) as MaxDate 
     FROM tblvalue 
     WHERE tblvalue.deleted = 0 
    ) vm on DATE(v.date) = vm.MinDate or DATE(v.date) = vm.MaxDate 
    WHERE tblvalue.deleted = 0 
    ORDER BY vm.MinDate desc, Random() 
    LIMIT 20 
) a 
ORDER BY DATE(date)  
+0

OP : "날짜별로 정렬 할 때 항상 테이블의 첫 번째 값과 마지막 값을 선택하는 것이 중요합니다" –

+0

감사하지만 레코드를 무작위로 고르게 분산 시키길 원합니다. 나는 명확하지 않았고, 내 질문을 업데이트했다. – Mrbiggerm

2

뭔가가 당신을 위해 작동합니다 :

+0

이상한 순서로 레코드를 반환합니다. 먼저 최소 날짜를 입력 한 다음 최대 날짜를 입력 한 다음 중간에 18을 입력합니다. 제대로 정렬하려면 다른 외부 쿼리가 필요하다고 생각합니다. –

+0

@Sam : 예, 지정되지 않았으므로 건너 뜁니다. 순서는 최소 및 최대 날짜가 반환되도록 보장하는 것입니다. 적절한 정렬을위한 외부 쿼리를 포함하도록 업데이트했습니다. – RedFilter

+0

그러나 이것은 임의의 레코드를 선택하기 만합니까? – Mrbiggerm

관련 문제