繁体   English   中英

Mysql:按用户和案例编号选择最近的条目

[英]Mysql: Select most recent entry by user and case number

我有一个表,其数据如下所示:

INSERT INTO `cm_case_notes` (`id`, `case_id`, `date`, `time`, `description`, `username`,       `supervisor`, `datestamp`) VALUES
(45977, '1175', '2010-11-19 16:27:15', 600, 'Motion hearing...Denied.', 'bjones', 'jharvey,', '2010-11-19 21:27:15'),
(46860, '1175', '2010-12-11 16:11:19', 300, 'Semester Break Report', 'bjones', 'jharvey,', '2010-12-11 21:11:19'),
(48034, '1175', '2011-05-04 17:30:03', 300, 'test', 'bjones', 'jharvey,', '2011-05-04 22:30:03'),
(14201, '1175', '2009-02-06 00:00:00', 3600, 'In court to talk to prosecutor, re: the file', 'csmith', 'sandrews', '2009-02-07 14:33:34'),
(14484, '1175', '2009-02-13 00:00:00', 6300, 'Read transcript, note taking', 'csmith', 'sandrews', '2009-02-16 17:22:36');

我正在尝试为每个用户选择每个案例的最新案例说明(按date )。 我提出的最好的是:

SELECT * , MAX(  `date` ) FROM cm_case_notes WHERE case_id =  '1175' GROUP BY username

但是,这并不是最近的条目,而是每个用户的第一个条目。 我在这里看过几个类似的帖子,但我似乎无法让我的大脑围绕着他们。 有人会对sql缺陷和帮助表示同情吗?

如果您只希望每个用户和每个案例的最新案例说明的日期,您可以使用:

--- Q ---
SELECT case_id
     , username 
     , MAX(  `date` ) AS recent_date 
FROM cm_case_notes 
GROUP BY case_id
       , username 

如果您想要这些行中的所有列(具有最近的日期),请遵循各种解决方案(或其他提供的链接)的Quassnoi链接。 最容易编写的是将上述查询转换为子查询并将其连接到cm_case_notes

SELECT cn.*
FROM 
      cm_case_notes AS cn
  JOIN 
      ( Q ) AS q
    ON  ( q.case_id,  q.username,  q.recent_date ) 
      = ( cn.case_id, cn.username, cn.`date` )

如果您只想要lastet案例注释但仅针对特定的case_id ,那么您可以在cnQ添加where条件(Q略微修改):

SELECT cn.*
FROM 
      cm_case_notes AS cn
  JOIN 
      ( SELECT username 
             , MAX(  `date` ) AS recent_date 
        FROM cm_case_notes 
        WHERE case_id = @particular_case_id
        GROUP BY username 
      ) AS q
    ON  ( q.username,  q.recent_date ) 
      = ( cn.username, cn.`date` )
WHERE cn.case_id = @particular_case_id

你没有得到从数据库中获取的东西的原因是SELECT *GROUP一起使用。

实际上,只能安全地选择聚合函数和/或组字段本身的结果。 选择任何其他内容会导致意外结果。 (确切的结果取决于订单,查询优化等)。

您要实现的目标称为获取“groupwise maximum”。 这是SQL中常见的问题/常见任务,你可以在这里阅读一篇很好的文章: http//jan.kneschke.de/projects/mysql/groupwise-max/

或者在MySQL手册中: http//dev.mysql.com/doc/refman/5.1/en/example-maximum-column-group-row.html

或者stackoverflow用户Quassnoi在这里详细解释: http//explainextended.com/2009/11/24/mysql-selecting-records-holding-group-wise-maximum-on-a-unique-column/

您是否考虑过DESC订购并简单地限制1?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM