2013-07-23 20 views
0

我有整數和參數表:加入一個嵌套的MySQL查詢與現場來自其他表

date timestamp 
123 2013-07-22 16:33:17 
123 2013-07-22 16:34:47 
234 2013-07-20 16:33:15 
332 2013-07-24 16:33:37 
422 2013-07-21 10:13:11 
422 2013-07-22 14:53:12 

我運行下面的查詢來獲取不同的數據的數量它從選擇和隨機件不同的數據:

SELECT COUNT(DISTINCT(data)) as count, (SELECT data FROM data_table WHERE 
    DATE(timestamp) >= '2013/07/22' AND DATE(timestamp) < '2013/07/23' 
    GROUP BY data ORDER BY rand() LIMIT 1) as data FROM data_table WHERE 
    DATE(timestamp) >= '2013/07/22' AND DATE(timestamp) < '2013/07/23' 

我也得到:

count data 
2  123 

count data 
2  422 

現在我有另一個表,* text_table *,蒙山主鍵數據。它看起來像這樣:

data text 
123 "hi" 
234 "hey" 
332 "bye" 
422 "cya" 

我需要的查詢來獲取先前查詢的結果,再加上文本

count data text 
2  123 "hi" 

count data text 
2  422 "cya" 

我想:

SELECT text_table.text AS text, COUNT(DISTINCT(data_table.data)) as count, 
    (SELECT data FROM data_table GROUP BY data ORDER BY rand() LIMIT 1) as data 
    FROM data_table LEFT OUTER JOIN text_table ON data_table.date = text_table.text 

但是,無論什麼數據都一直返回相同的文本

回答

1

我做到了這樣,讓你需要的所有信息。

SELECT COUNT(dt.date) count, dt.date, tt.text FROM data_table dt 
JOIN text_table tt ON tt.date = dt.date 
GROUP BY dt.date, tt.text 

現在你只需要過濾它來獲得你想要的數據。

這樣,

SELECT COUNT(dt.date) count, dt.date, tt.text FROM data_table dt 
JOIN text_table tt ON tt.date = dt.date 
WHERE dt.timestamp > '2013/07/22' AND dt.timestamp < '2013/07/23' 
GROUP BY dt.date, tt.text 

你也可以有最高的1只獲取第一線

感謝, 奇科

+0

非常感謝。我必須用'(SELECT COUNT(DISTINCT(data_table.id))FROM data_table替換COUNT(dt.date)'WHERE data_table.time>'2013/07/22'AND data_table.time <'2013/07/23 ')'來獲取記錄的總數,而不是** GROUPED BY **的記錄數。 Muito obrigado :) – Xeos

0

試試這個:

SELECT COUNT(DISTINCT(data_table.data)) as count, 
    (SELECT data FROM data_table GROUP BY data ORDER BY rand() LIMIT 1) as data 
,text_table.text AS text 
FROM data_table JOIN text_table ON data_table.date = text_table.text 
+0

它返回我的*文本*以最低的*數據關聯*。在上面的例子中,它會返回:'2 422「hi」'而不是'2 422「cya」' – Xeos