我发现这个查询,我认为这将解决我的问题:
SELECT MemberID, ContractID, StartDate, EndDate
FROM member_contracts
WHERE ContractId IN (
SELECT MAX(ContractId)
FROM member_contracts
GROUP BY MemberId
)
这个问题由@Mark Byers提供,作为对另一个问题的回答。
我如何在CodeIgniter中使用此查询,尤其是“Where_in”子句。
感谢
答案 0 :(得分:1)
在CI中,您可以使用$this->db->query("yourquery");
来执行查询。试试
$query=$this->db->query("SELECT MemberID, ContractID, StartDate, EndDate
FROM member_contracts
WHERE ContractId IN (
SELECT MAX(ContractId)
FROM member_contracts
GROUP BY MemberId
)");
答案 1 :(得分:1)
您仍然可以使用活动记录库来使用get_compiled_select()
$this->db->select('MAX(ContractId)')
->from('member_contracts')
->group_by('MemberId');
$subquery = $this->db->get_compiled_select();
$this->db->select('MemberID, ContractID, StartDate, EndDate')
->from('member_contracts ')
->where("ContractId IN($subquery)", NULL, FALSE)
->get()
->result();
此外,您可以使用join而非子查询重写查询以获取每组的最新记录,并且MemberId,ContractId
上的复合索引也很有用
SELECT m.MemberID, m.ContractID, m.StartDate, m.EndDate
FROM member_contracts m
JOIN (
SELECT MemberId,MAX(ContractId) ContractId
FROM member_contracts
GROUP BY MemberId
) mm
USING(MemberId,ContractId)