2017-01-23 37 views
0

我有這個表:在sqlite3的選擇最大值,最小值功能不能得到正確的結果

CREATE TABLE data ( 
    timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, 
    channel INTEGER DEFAULT '0', 
    raw_Value REAL  DEFAULT '0', 
    modify REAL  DEFAULT '0' 
); 

我能得到正確的結果與此查詢

SELECT 
    (SELECT TIMESTAMP 
     WHERE value= 
     (SELECT max(value))) AS maxDate 
FROM 
     (SELECT *,raw_value AS value 
     FROM DATA 
     WHERE TIMESTAMP>='2017-01-23 00:00:00' 
     AND TIMESTAMP<'2017-01-24 00:00:00' 
     AND channel=0); 

結果是:

maxDate 
------------------- 
2017-01-23 16:47:00 

但是當我使用這個查詢,那麼我有一個(空)結果

SELECT 
    (SELECT TIMESTAMP 
    WHERE value= 
    (SELECT max(value))) AS maxDate, 

    (SELECT TIMESTAMP 
    WHERE value= 
    (SELECT min(value))) AS minDate 
FROM 
    (SELECT *,raw_value AS value 
    FROM DATA 
    WHERE TIMESTAMP>='2017-01-23 00:00:00' 
    AND TIMESTAMP<'2017-01-24 00:00:00' 
    AND channel=0); 

結果是:

maxDate  minDate 
---------- ------------------- 
      2017-01-23 12:32:00 

當我使用這個詞,只需改變順序:

SELECT 
    (SELECT TIMESTAMP 
    WHERE value= 
    (SELECT min(value))) AS minDate, 

    (SELECT TIMESTAMP 
    WHERE value= 
    (SELECT max(value))) AS maxDate 


FROM 
    (SELECT *,raw_value AS value 
    FROM DATA 
    WHERE TIMESTAMP>='2017-01-23 00:00:00' 
    AND TIMESTAMP<'2017-01-24 00:00:00' 
    AND channel=0); 

現在我得到這樣的:

minDate  maxDate 
---------- ------------------- 
      2017-01-23 16:47:00 

做我錯過了什麼?

+1

請解釋一下你正在嘗試做的。 –

+0

我打算得到最大值和最小值的發生時間 –

回答

0

如何只聯接和group by

SELECT t.timestamp, t.value 
FROM (SELECT value, MIN(TIMESTAMP) as min_timestamp, MAX(TIMESTAMP) as max_TIMESTAMP 
     FROM DATA 
     WHERE TIMESTAMP >= '2017-01-23 00:00:00' AND 
      TIMESTAMP < '2017-01-24 00:00:00' AND 
      channel = 0 
    ) tt JOIN 
    DATA t 
    ON t.TIMESTAMP IN (min_timestamp, max_timestamp) 
WHERE t.channel = 0; 
相關問題