如何获取重复 usid 的特定日期范围的最新数据
Posted
技术标签:
【中文标题】如何获取重复 usid 的特定日期范围的最新数据【英文标题】:how to get latest data for a particular date range for duplicate usrid 【发布时间】:2020-01-12 20:56:33 【问题描述】:我有 2 张桌子。一个是用户详细信息,另一个是付款表。我只想在一个月内获得该用户的最新数据。
$sql="SELECT a.usr_id, a.fname, a.lname, c.user_id, c.payment_dt
FROM user_details a
INNER JOIN payment c
ON a.usr_id = c.user_id
INNER JOIN (SELECT user_id,
Max(payment_dt) maxDate
FROM payment
GROUP BY user_id) b
ON c.user_id = b.user_id
AND c.payment_dt = b.maxdate
WHERE c.payment_dt BETWEEN '$start_dt' AND '$end_dt' ";
$ex = $this->db->query($sql);
$data['info'] = $ex->result();
【问题讨论】:
您遇到了什么问题? 您需要多个付款结果吗? 否。我只需要该用户的最新付款日期行。只有一行。 @Gulshan 我没有得到正确的结果..意味着重复的用户 ID 我没有得到单行。@PathikVejani 试试group_by
user_id
【参考方案1】:
如果您有多个用户 ID,您的查询将产生多行。我认为您正在尝试在给定的用户 ID 上获得结果?添加这可能会有所帮助and a.user_id = '$userID'
$sql="SELECT a.usr_id, a.fname, a.lname, c.user_id, c.payment_dt
FROM user_details a
INNER JOIN payment c
ON a.usr_id = c.user_id
INNER JOIN (SELECT user_id,
Max(payment_dt) maxDate
FROM payment
GROUP BY user_id) b
ON c.user_id = b.user_id
AND c.payment_dt = b.maxdate
WHERE c.payment_dt BETWEEN '$start_dt' AND '$end_dt' and a.user_id = '$userID' ";
$ex = $this->db->query($sql);
$data['info'] = $ex->result();
【讨论】:
【参考方案2】:更新您的查询:
$start_dt = '2019-04-01';
$end_dt = '2019-04-06';
$sql="SELECT a.usr_id, a.fname, a.lname, c.user_id, c.payment_dt
FROM user_details a
LEFT JOIN payment c
ON a.usr_id = c.user_id
LEFT JOIN (SELECT user_id,
Max(payment_dt) maxDate
FROM payment
GROUP BY user_id) b
ON c.user_id = b.user_id
AND c.payment_dt = b.maxdate
WHERE date(c.payment_dt) BETWEEN '$start_dt' AND '$end_dt' GROUP_BY a.usr_id " ;
希望这能解决您的问题
【讨论】:
对不起。当支付表中有重复用户时,它不返回任何数据。@Gulshan 用LEFT
替换INNER
现在工作正常后被左连接替换。谢谢@Gulshan
@SwetalinaRay :)【参考方案3】:
试试这个
$sql="SELECT a.usr_id, a.fname, a.lname, c.user_id, max(c.payment_dt) as payment_dt
FROM user_details a
INNER JOIN payment c ON a.usr_id = c.user_id
WHERE c.payment_dt BETWEEN '$start_dt' AND '$end_dt' group by c.user_id";
$ex = $this->db->query($sql);
$data['info'] = $ex->result();
【讨论】:
以上是关于如何获取重复 usid 的特定日期范围的最新数据的主要内容,如果未能解决你的问题,请参考以下文章
Django 2021年最新版教程27数据库model 查询2个日期范围内的所有日期