2012-10-06 3 views
2

저는 프로젝트를 수행하는 학생이고 SQLite를 사용해야하지만 SQLite를 처음 사용합니다. 나는 내 문제를 아래에 묘사했다.SQLite에서 열 정렬 및 순서 지정

아래에 표시된 형식의 테이블 (60000 개의 행 포함)이 있습니다. 데이터가 뉴욕으로 누락 된 경우 'NaN이'하지 않을 경우 이전 데이터를로드해야합니다, 아래 그림과 같이

Date_Time   Country_City Temperature 
4-10-2012 12:10:10 USA_NYC  20 
4-10-2012 12:10:10 USA_LA   17 
4-10-2012 12:10:10 USA_DC   19 
4-10-2012 12:40:10 USA_LA   18 
4-10-2012 12:40:10 USA_DC   18 

나는 정렬하고 테이블을 만들어야합니다.

Date_Time   USA_NYC USA_LA USA_DC 
4-10-2012 12:10:10 20  17  19 
4-10-2012 12:40:10 20  18  18 

당신은 내가 정렬 순서 및 수, 그것을 어떻게 만들 말해 주시겠습니까,하지만 난 SQLite는이 같은 생성하는 방법을 모르겠어요. 어떤 제안이라도 고맙게 생각합니다. 주어진 타임 스탬프 및 도시에 대한

+1

30 분 동안 모두 사라진다면 어떻게 될까요? –

답변

1

, 다음 쿼리는 또는 그 시간 전에 최신 온도를 가져옵니다

SELECT Temperature AS USA_NYC 
FROM mytable 
WHERE Country_City = 'USA_NYC' 
    AND Date_Time LIKE '4-10-2012 %' 
    AND Date_Time <= '4-10-2012 12:40:10' 
    AND Temperature IS NOT NULL 
ORDER BY Date_Time DESC 
LIMIT 1 

(당신이 SQLite는의 supported date/time formats 중 하나를 사용하는 경우 Date_Time 비교가 단순화 될 수 있음을 유의하시기 바랍니다.)

우리는 또한 우리는 약간의 온도하려는 모든 타임 스탬프를 얻을 : 이제

SELECT DISTINCT Date_Time FROM mytable 

을 우리는 각각의 타임 스탬프에 대한 NYC 값을 얻기 위해이 두 쿼리를 결합 :

SELECT timestamps.Date_Time, 
     (SELECT Temperature 
     FROM mytable tvalues 
     WHERE tvalues.Country_City = 'USA_NYC' 
      AND tvalues.Date_Time LIKE substr(timestamps.Date_Time, 1, 10) || '%' 
      AND tvalues.Date_Time <= timestamps.Date_Time 
      AND tvalues.Temperature IS NOT NULL 
     ORDER BY tvalues.Date_Time DESC 
     LIMIT 1) AS USA_NYC 
FROM (SELECT DISTINCT Date_Time 
     FROM mytable) timestamps 

는 연습 문제로 남겨 LADC의 열을 추가. (이 열을 Country_City 값으로 자동 생성 할 수는 없으며 SQLite에는 피벗 테이블 함수가 없습니다.)

+0

해결책을 주셔서 감사합니다. 완벽하게 작동합니다. 800 개의 변수 (Country_city : USA_NYC, USA_LA, CAN_Tor와 유사)가있는 경우 다른 쿼리를 사용하므로 모든 800 변수를 정의해야합니다. 나는 그것을 희망하지 않으며 그것을위한 해결책은 무엇입니까? – narendhrancs

+0

800 개의 열이있는 테이블을 원한다는 뜻입니까? 내가 대답의 끝에 쓴 것처럼, 이것은 불가능합니다. 원래 표와 같이 정규화 된 형식으로 데이터를 반환해야합니다. –

0

@Cl : 감사의 인사말을 보내 주셔서 감사합니다. 운동에 대한 대답은

필요한 솔루션이나 다른 유하는 것입니다 다른 아무것도 기대 이것이다

SELECT timestamps.Date_Time,

FROM
(SELECT Temperature 
    FROM mytable tvalues 
    WHERE tvalues.Country_City = 'USA_NYC' 
     AND tvalues.Date_Time LIKE substr(timestamps.Date_Time, 1, 10) || '%' 
     AND tvalues.Date_Time <= timestamps.Date_Time 
     AND tvalues.Temperature IS NOT NULL 
    ORDER BY tvalues.Date_Time DESC 
    LIMIT 1) AS USA_NYC, 
    (SELECT Temperature FROM mytable tvalues WHERE tvalues.Country_City = 'USA_LA' 
     AND tvalues.Date_Time LIKE substr(timestamps.Date_Time, 1, 10) || '%' 
     AND tvalues.Date_Time <= timestamps.Date_Time 
     AND tvalues.Temperature IS NOT NULL 
    ORDER BY tvalues.Date_Time DESC 
    LIMIT 1) AS USA_LA,  SELECT Temperature 
    FROM mytable tvalues 
    WHERE tvalues.Country_City = 'USA_DC' 
     AND tvalues.Date_Time LIKE substr(timestamps.Date_Time, 1, 10) || '%' 
     AND tvalues.Date_Time <= timestamps.Date_Time 
     AND tvalues.Temperature IS NOT NULL 
    ORDER BY tvalues.Date_Time DESC 
    LIMIT 1) AS USA_DC, 

(MYTABLE 구별 DATE_TIME 를 선택) 타임 스탬프입니다 더 빨라?

+0

@ CL : 귀하의 설명에 감사드립니다. 연습 문제에 대한 답은 위의 그림과 같으며 필요한 해결책입니까? 아니면 다른 무엇을 기대합니까? – narendhrancs

+0

예, 이것이 3 개 도시에서 사용하는 것입니다. 이것은 800 개의 도시에서하는 것이 정신 나간 것입니다; 그것들을 분리 된 컬럼으로 정말로 필요합니까? –

+0

@CL : 예. 일부 열에 대해서는 NULL 대신 이전 값을 호출하고 싶지 않거나 NaN에 어떤 변경을해야하는지 표시해야합니까? – narendhrancs