【问题标题】:Get latest records without matching condtion in mysql获取mysql中不匹配条件的最新记录
【发布时间】:2013-08-25 02:56:30
【问题描述】:

即使不匹配MYsql中的条件,我也想获取最新记录。

例如,我想按产品类型分组选择 2013-01-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-01-20 的数据与其他产品的最新数据相结合。

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

如何在 MYSQL 中做到这一点?

问候。

【问题讨论】:

  • 请发布您的尝试。

标签: mysql


【解决方案1】:

您可以通过聚合数据来获得最大日期,然后将此信息连接回原始表来做到这一点:

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;

【讨论】:

    【解决方案2】:

    我想这就是你想要的:

    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
    

    或主查询中的 WHERE 子句:

    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'
    

    【讨论】:

    • 如果我们设置日期条件date= 2013-01-20,但我们也会列出其他产品类型的最新数据。那么如何在 subjquery 中做到这一点?
    • 我不明白您所说的“设置日期条件”是什么意思?你的意思是你只想要那个日期的结果,而不是使用每种类型的最新日期?
    • 你不需要子查询或连接,只需要一个普通的 WHERE 子句。
    • 我想过滤条件 date=2013-01-20,但是其他不符合这个条件的产品类型,我也想获取这些产品类型的最新数据。你明白了吗?
    • 所以您不想在示例的结果中获取类型 1 或 2 的行?
    猜你喜欢
    • 2020-12-22
    • 2017-03-12
    • 1970-01-01
    • 2019-12-28
    • 2018-09-16
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多