簡體   English   中英

如何在MySQL中按日期獲取最新值?

[英]How to fetch the latest value by date in MySQL?

我有一個稱為付款表,其中添加了所有付款條目。 我在付款表中有一個字段customer_id,它表示客戶表中的客戶ID。

有一個名為flag的字段,我根據其付款狀態存儲1或0。 如果他們支付了全額,則標記將為0,如果有余額,標記將為1

付款表中還有另一個字段add_on,它是一個時間戳

我想提取所有帶有標記1(待付款)的customer_id(在付款表中)的最新添加的行

我嘗試像這樣從付款表中獲取

   $rResult = mysql_query("select * from payment  where flag='1'")

然后像這樣循環

    while ($aRow=mysql_fetch_object($rResult))
        {
        //fetch out the customer id like this
$customer= $aRow->customer_id;
    $pay_quer = mysql_query("select*from payment where customer_id='$customer'");

        } 

我知道這樣做很長..有沒有更短的方法來完成一個查詢? 結果也沒有達到我的預期。 :(

我不知道您的表和字段的名稱,但您明白了:

SELECT * 
FROM payment
JOIN customer ON payment.customer_id = customer.customer_id
WHERE payment.flag = '1'
ORDER BY payment.added_on ASC;

這將包含與客戶有關的所有與付款相關的信息(按最新的優先順序排列)。

為什么不只使用一個select語句並遍歷結果呢?

SELECT customer_id FROM payment WHERE flag='1' ORDER BY added_on DESC

希望這將使所有具有按'additional_on'余額的客戶。 =)


像下面的答案一樣,您也可以添加“與”以進一步減少結果。

只需訂購您的選擇語句:

Select * from payment where flag = '1' and customer_id='$customer' order by YourTimeStempFieldHere

您可以通過在timestemp字段后面添加“ desc”或“ asc”來更改順序方向。

您也可以使用mysql LIMIT 0,1運算符限制結果。 如果這樣做,則不必執行while循環。

用它來按時間排序。

  $rResult = mysql_query("select * from payment  where flag='1' ORDER BY added_on DESC");

  while ($aRow=mysql_fetch_object($rResult))
    {
    //fetch out the customer id like this
     $customer= $aRow->customer_id;
     $field2 = $aRow->field2 ;
     $field3 = $aRow->field3 ;
     $field3 = $aRow->field4 ;
    } 

不需要第二個查詢。 您已經在for循環中獲得了值

SELECT p.* 
FROM 
    payment AS p
  JOIN
    ( SELECT customer_id
           , MAX(added_on) AS max_added_on
      FROM payment
      WHERE flag='1'
      GROUP BY customer_id
    ) AS g
    ON  g.customer_id = p.customer_id
    AND g.max_added_on = p.added_on
ORDER BY p.added_on DESC

或(不清楚您到底想要什么,也不知道如何使用該標志)。 這將顯示不同的結果,僅顯示其payment中的最新行具有flag=1那些客戶:

SELECT p.* 
FROM 
    payment AS p
  JOIN
    ( SELECT customer_id
           , MAX(added_on) AS max_added_on
      FROM payment
      GROUP BY customer_id
    ) AS g
    ON  g.customer_id = p.customer_id
    AND g.max_added_on = p.added_on
WHERE p.flag='1'
ORDER BY p.added_on DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM