如何获取重复 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_byuser_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个日期范围内的所有日期

SQL查询获取特定日期和列中最新日期之间的数据

如何根据最新日期从多条记录中获取特定记录

如何根据特定日期获取最后修改的文件并导入python脚本[重复]

当时间范围在两天之间时如何获取特定时间范围内的记录

Java:检查当前日期是不是在特定日期范围内[重复]