2013-08-25 28 views
0

即使没有匹配MYsql中的条件,我也想获取最新记录。在mysql中获取最新的记录,但没有匹配条件

例如,我想根据产品类型分组选择2013年1月20日的数据,但它不符合此条件,因此它将获得这些产品类型的最新日期(2013-01-19)或2013-01-15)。

Coding: 

Select date from tblproducttype where 
date=(select max(date) from tblproducttype group by type) where date='2013-01-20' 


Table product type 

ID Type Date 
1 2  2013-01-20 
2 2  2013-01-20 
3 2  2013-01-14 
4 3  2013-01-19 
5 4  2013-01-16 
6 4  2013-01-13 

结果应该是以下几点:

ID Type Date 
1 2  2013-01-20 
2 2  2013-01-20 
4 3  2013-01-19 
5 4  2013-01-16 

对于结果,我想要的数据2013年1月20日与其他产品的最新数据结合起来。

最后,我们只能得到那些产品类型的最新日期。

如何在MYSQL中做到这一点?

问候。

+1

请张贴您的企图。 –

回答

0

我想这是你想要什么:

SELECT p.* 
FROM product_type p 
JOIN (SELECT Type, MAX(Date) maxdate 
     FROM prodct_type 
     GROUP BY Type) m 
ON p.Type = m.Type and p.Date = m.maxdate 

m子查询查找每个类型的最新日期。然后,联接会在该日期查找每种类型的所有行。

要筛选出的条件,在子查询中使用HAVING子句:

SELECT p.* 
FROM product_type p 
JOIN (SELECT Type, MAX(Date) maxdate 
     FROM prodct_type 
     GROUP BY Type 
     HAVING maxdate != '2013-01-20') m 
ON p.Type = m.Type and p.Date = m.maxdate 

或凡在主查询子句:

SELECT p.* 
FROM product_type p 
JOIN (SELECT Type, MAX(Date) maxdate 
     FROM prodct_type 
     GROUP BY Type) m 
ON p.Type = m.Type and p.Date = m.maxdate 
WHERE maxDate != '2013-01-20' 
+0

如果我们设定日期条件日期= 2013-01-20,但是也列出其他产品类型的最新数据。所以如何在subjquery中做到这一点? –

+0

我不明白“设置日期条件”是什么意思?你的意思是你只需要在该日期的结果,而不是使用每种类型的最新日期? – Barmar

+0

您不需要子查询或连接,只需要一个普通的WHERE子句。 – Barmar

0

您可以通过数据汇总做到这一点得到最大日期,然后加入这个信息回原表:

select t.id, t.type, t.date 
from t join 
    (select type, max(date) as maxdate 
     from t 
     group by type 
    ) tsum 
    on t.type = tsum.type and t.date = tsum.maxdate 
order by id; 
相关问题