2015-12-21 2088 views
0

我想为最近7天的每天获取每个产品的最后一个时间戳。数据库中有数千条记录。我怎样才能做到这一点与查询。大约有25种不同的产品,每种产品每天有大约50个时间戳。最近7天的最后时间戳

表:BuildData

'Timestamp' | 'Product' | 'BuildNo' 

'2015-10-21 12:12:00', 'AB', '809' 
'2015-10-21 13:12:00', 'AB', '44' 
'2015-10-21 12:12:00', 'CD', '408' 
'2015-10-21 13:12:00', 'CD', '15' 
'2015-10-21 12:12:00', 'ABC', '1699' 
'2015-10-21 13:12:00', 'ABC', '1051' 
'2015-10-21 14:12:00', 'ABC', '66' 
'2015-10-21 15:12:00', 'ABC', '120' 
'2015-10-21 13:12:00', 'XYZ', '928' 
'2015-10-21 13:12:00', 'XYZ', '37' 
'2015-10-21 16:12:00', 'XYZ', '137' 
+0

您是否试图解决所有需求?如果是,请告诉我们 – Bayeni

回答

2

通过使用DATE()隐蔽的时间戳抢在表中的所有日期。然后将日期和产品列分组在一起,并在时间戳列上运行MAX()以获取每个产品的最后一次时间戳。

SELECT DATE(Timestamp) AS Date, Product, MAX(Timestamp) AS Last_timestamp 
FROM Builddata 
WHERE BETWEEN DATE_SUB(NOW(),INTERVAL 1 WEEK) and NOW(); 
GROUP BY Date, Product 
+0

Op还要求提供'where'子句 - “最近7天”。 'where timestamp> date_sub(CURDATE(),interval 7 day)'会做。 – Timekiller

+0

@Timekiller谢谢,我忘了那部分 –

+0

@劳埃德银行 - 它只给出了一个产品的最后时间戳。输出必须包括每个产品的7个时间戳(每天的最后一个时间戳)。感谢您的快速响应 –

0
Select 
Timestamp, 
Product, 
BuildNo 
from Yourtable 
inner join 
-- Selecting max data per product per day 
(Select max(timestamp) as MaxTimestamp, Product as MaxProduct from yourTBL 
-- You only want the data for the last 7 days 
where datediff(timestamp,current_timestamp)<7 
group by Product, date_add(0,INTERVAL (datediff(0,timestamp)) DAY )MaxTbl 
on MaxProduct = Product and MaxTimestamp=Timestamp 
+0

@ Andrej你能解释一下这个查询吗 –