【问题标题】:how to get latest data for a particular date range for duplicate usrid如何获取重复 usid 的特定日期范围的最新数据
【发布时间】: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

标签: php sql codeigniter


【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 2015-01-04
      • 2022-12-18
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 2017-06-05
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多