加入最后一条记录

时间:2014-12-01 08:49:35

标签: mysql sql greatest-n-per-group

我有这个mysql语句

SELECT `leads`.*,
     `lead_notes`.`lead_id`,
     `lead_notes`.`status`
  FROM `leads`
     LEFT JOIN `lead_notes` ON `leads`.`id` = `lead_notes`.`lead_id`
          WHERE `leads`.`pixel` IN (".implode(',', array_map('add_quotes', $my_pixels)).")
              AND `lead_notes`.`status`='4' 

但我只想加入lead_notes中的最后一条记录。 谢谢

好的,我的问题不明确,我会再试一次 我想从最后一个lead_notes状态等于x

的潜在客户获得所有的记录

我有两张桌子

---table leads---           ---table lead_notes---
id  pixel   date            id  lead_id     status  date
1   uuid1   unixtime        1   5           1       unixtime
2   uuid1   unixtime        2   4           0       unixtime
3   uuid2   unixtime        3   3           2       unixtime
4   uuid1   unixtime        4   2           4       unixtime
5   uuid3   unixtime        5   1           2       unixtime
                            6   2           2       unixtime
                            7   4           4       unixtime
                            8   5           2       unixtime
                            9   1           1       unixtime
                            10  3           2       unixtime

我想在最新的一个(与id匹配lead_id)的lead_notes上加入lead 如果状态等于x

,请选择它

2 个答案:

答案 0 :(得分:0)

现在你澄清了:你根本不必加入。您需要最后一个状态等于给定值(例如4)的潜在客户。所以这属于WHERE子句。使用ORDER BY和LIMIT获得领先的最后记录。

select *
from leads
where
(
  select lead_notes.status
  from lead_notes 
  where lead_notes.lead_id = leads.id
  order by lead_notes.note_date desc
  limit 1
) = '4';

答案 1 :(得分:-1)

dec @row int=0 


 SELECT `leads`.*,
 `lead_notes`.`lead_id`,
 `lead_notes`.`status`
 FROM `leads`
 LEFT JOIN `lead_notes` ON `leads`.`id` =select max(a) from (select @row=@row+1 as a from `lead_notes')
  WHERE `leads`.`pixel` IN (".implode(',', array_map('add_quotes', $my_pixels)).")
  AND `lead_notes`.`status`='4'