2017-12-02 108 views
-1

我已經具有相同的結構serveral的數據庫:MySQL的SELECT使用WHERE'之間

DSID,標籤,時間戳值

時間戳是unixtime,我可以選擇要繪製的數據是這樣的:

SELECT CONCAT(t.`dsid` ,' - ', t.`dsid` - 1) AS `DSIDs` 
, t.`value` - (SELECT `value` 
       FROM `MY-DB` 
       WHERE `dsid` = t.`dsid` - 1 * 20) AS `kWh`, 
       tag, dsid, value, 
       FROM_UNIXTIME(timestamp, '%y-%d-%m %H:%i') 
FROM `MY-DB` t limit 10000; 

但我想基於結構「其中間日期」來選擇它,所以我可以選擇按月或按周......甚至更好「最後」周,月,年(成立滿一年或只是過去12個月)。

但如果我嘗試這樣的失敗:

SELECT CONCAT(t.`dsid` ,' - ', t.`dsid` - 1) AS `DSIDs` 
, t.`value` - (SELECT `value` 
       FROM `MY-DB` 
       WHERE `dsid` = t.`dsid` - 1 * 20) AS `kWh`, 
       tag, dsid, value, (FROM_UNIXTIME(timestamp, '%y-%d-%m %H:%i') WHERE 'timestamp' BETWEEN UNIX_TIMESTAMP('16-27-03 23:45')) AND UNIX_TIMESTAMP('16-25-02 00:00') 
FROM `MY-DB` t limit 10000; 

有什麼不對?

+0

那麼,您發現從日期和時間段轉換爲日期的Google搜索結果是什麼?谷歌我的意見重新搜索問題的許多措辭/版本。另外,「失敗」是什麼意思?請按照[mcve]採取行動。 PS您可能不希望SQL之間'因爲它是包容性的。 – philipxy

+0

我發現了幾個不同的版本和使用的記錄的例子,但他們沒有爲我工作,或者我用他們錯誤的方式。失敗的人是這樣的:[代碼:1064,SQL狀態:42000]你的SQL語法錯誤;檢查對應於您的MariaDB服務器版本的手冊,以找到在'WHERE'timestamp'BETWEEN UNIX_TIMESTAMP('16 -27-03 23:45'))和UNIX_TIMESTAMP('''在第5行附近使用' – Mircsicz

+0

'附近沒有選擇以匹配第二個代碼塊中的最終位置請注意,froms&any連接和任何位置通常縮進相同的數量。請參閱我的編輯to your froms。將來刪除內容直到您沒有收到錯誤爲了本地化,每個** [mcve] **你仍然在這裏丟失PS編輯你的問題,不要在評論中澄清 – philipxy

回答

0

什麼是錯的,是我在錯誤的地方放置在WHERE & BETWEEN,這是它是如何工作對我來說:

SELECT CONCAT(t.`dsid` ,' - ', t.`dsid` - 1) AS `DSIDs` , t.`value` - (SELECT `value` 
      FROM `MYDB` 
      WHERE `dsid` = t.`dsid` - 1 * 20) AS `kWh`, 
      tag, dsid, value, 
      FROM_UNIXTIME(timestamp, '%y-%m-%d %H:%i') as time 
FROM `MYDB` t 
WHERE timestamp 
BETWEEN UNIX_TIMESTAMP('16-08-01') AND UNIX_TIMESTAMP('16-08-31 23:59:59') 

可能不是這樣做的最有效的方法..