Passer au contenu principal

Description

Le combinateur If peut être appliqué à la fonction argMin pour trouver la valeur de arg correspondant à la valeur minimale de val pour les lignes où la condition est vraie, à l’aide de la fonction de combinateur d’agrégation argMinIf. La fonction argMinIf est utile lorsque vous devez trouver la valeur associée à la valeur minimale dans un ensemble de données, mais uniquement pour les lignes qui remplissent une condition spécifique.

Exemple d’utilisation

Dans cet exemple, nous allons créer une table qui stocke les prix des produits et leurs horodatages, puis utiliser argMinIf pour trouver le prix le plus bas de chaque produit lorsqu’il est en stock.
Query
CREATE TABLE product_prices(
    product_id UInt32,
    price Decimal(10,2),
    timestamp DateTime,
    in_stock UInt8
) ENGINE = MergeTree
ORDER BY ();

INSERT INTO product_prices VALUES
    (1, 10.99, '2024-01-01 10:00:00', 1),
    (1, 9.99, '2024-01-01 10:05:00', 1),
    (1, 11.99, '2024-01-01 10:10:00', 0),
    (2, 20.99, '2024-01-01 11:00:00', 1),
    (2, 19.99, '2024-01-01 11:05:00', 1),
    (2, 21.99, '2024-01-01 11:10:00', 1);

SELECT
    product_id,
    argMinIf(price, timestamp, in_stock = 1) AS lowest_price_when_in_stock
FROM product_prices
GROUP BY product_id;
La fonction argMinIf trouvera le prix correspondant au horodatage le plus ancien pour chaque produit, mais uniquement en tenant compte des lignes où in_stock = 1. Par exemple :
  • Produit 1 : parmi les lignes en stock, 10.99 a le horodatage le plus ancien (10:00:00)
  • Produit 2 : parmi les lignes en stock, 20.99 a le horodatage le plus ancien (11:00:00)
Response
   ┌─product_id─┬─lowest_price_when_in_stock─┐
1. │          1 │                      10.99 │
2. │          2 │                      20.99 │
   └────────────┴────────────────────────────┘

Voir aussi

Dernière modification le 29 juin 2026