sql >> データベース >  >> RDS >> Mysql

MySQLクエリで最も近い数値を選択する

    1つのオプションは、次のようなものです。

    select   the_value,
             abs(the_value - 14) as distance_from_test
    from     the_table
    order by distance_from_test
    limit 1
    

    ランダムなレコードを選択するには、, rand()を追加します order by 句。この方法の欠点は、派生値distance_from_testで並べ替える必要があるため、インデックスのメリットが得られないことです。 。

    the_valueにインデックスがある場合 同点の場合は結果がランダムになるという要件を緩和し、限定範囲クエリのペアを実行して、テスト値のすぐ上の最初の値とテスト値のすぐ下の最初の値を選択し、最も近い方を選択できます。テスト値へ:

    (
    select   the_value
    from     the_table
    where    the_value >= 14
    order by the_value asc
    limit 1
    )
    union
    (
    select   the_value
    from     the_table
    where    the_value < 14
    order by the_value desc
    limit 1
    )
    order by abs(the_value - 14)
    limit 1
    


    1. phpを使用してXMLデータをmysqlに挿入します

    2. MariaDBの日時値から秒を引く

    3. postgresql重複キーが一意性制約に違反しています

    4. 週/月間隔の日付範囲でグループ化