簡體   English   中英

選擇第一個大於x的值(在MySQL中)

[英]Select first greater value than the x in MySQL

我正在使用Codeigniter開發保險比較平台。 我有一個包表,如下所示:

+----------+--------------+------------+---------------------+-------------+
| tpckg_id | tpckg_people | tpckg_days | tpckg_policy_amount | tp_name     |
+----------+--------------+------------+---------------------+-------------+
|       21 | individual   | 10         | 1000                | Test25      |
|       22 | family       | 7          | 2000                | Testing     |
|       23 | individual   | 20         | 600                 | TPL Care    |
|       24 | family       | 10         | 1000                | TPL Care    |
|       25 | individual   | 15         | 650                 | Travel Care |
|       26 | family       | 10         | 1100                | TPL Care    |
|       27 | individual   | 7          | 500                 | TPL Care    |
|       28 | family       | 7          | 1200                | Travel Care |
|       29 | family       | 10         | 500                 | TPL Care 2  |
|       30 | individual   | 11         | 500                 | TPL Care    |
+----------+--------------+------------+---------------------+-------------+

現在,我使用以下查詢獲取數據:

$this->db->select('travel_packages.tpckg_id, travel_packages.tpckg_people, travel_packages.tpckg_days, travel_packages.tpckg_policy_amount, travel_products.tp_name');

    $this->db->from('travel_packages');
    $this->db->join('travel_products', 'travel_products.tp_id = travel_packages.tpckg_products_id')

    $this->db->where('travel_packages.tpckg_people', 'Individual');
    $this->db->where('travel_packages.tpckg_days >= 10');

    $this->db->group_by('travel_packages.tpckg_policy_amount'); 
    $this->db->order_by('travel_packages.tpckg_policy_amount', 'ASC');

如預期的那樣,返回所有具有tpckg_people =個人且tpckg_days> = 10的記錄,如下所示:

+----------+--------------+------------+---------------------+-------------+
| tpckg_id | tpckg_people | tpckg_days | tpckg_policy_amount | tp_name     |
+----------+--------------+------------+---------------------+-------------+
|       21 | individual   | 10         | 1000                | Test25      |
|       23 | individual   | 20         | 600                 | TPL Care    |
|       25 | individual   | 15         | 650                 | Travel Care |
|       30 | individual   | 11         | 500                 | TPL Care    |
+----------+--------------+------------+---------------------+-------------+

如果沒有比用戶輸入的數字更多的數字,我希望它返回的只是前幾天。 例如,如果用戶輸入的天數為9,而我沒有帶9天數的包裹,則應該返回每種產品的第一個較大的天數。

像這樣:

+----------+--------------+------------+---------------------+-------------+
| tpckg_id | tpckg_people | tpckg_days | tpckg_policy_amount | tp_name     |
+----------+--------------+------------+---------------------+-------------+
|       21 | individual   | 10         | 1000                | Test25      |
|       25 | individual   | 15         | 650                 | Travel Care |
|       30 | individual   | 11         | 500                 | TPL Care    |
+----------+--------------+------------+---------------------+-------------+

對查詢有任何幫助嗎? 提前致謝。 :-)

這是一個原始查詢...

Select x.* 
  From travel_packages x
  Join
     ( Select tp_name name
            , tpckg_people people
            , min(tpckg_days) min_days 
         from travel_packages 
        where tpckg_people = 'individual' 
          and tpckg_days >= 9 
        group 
           by name
            , people
     ) y
    On y.name = x.tp_name
   And y.people = x.tpckg_people
   And y.min_days = x.tpckg_days;

暫無
暫無

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

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