首页 > 解决方案 > 如何将 MIN(date) 函数集成到 SELECT*

问题描述

我试图解决的问题的细分。我需要:

  1. 最早created_date获取每个user_id. 我知道这可以通过以下查询来完成:

    SELECT user_id, MIN(created_date)
    FROM new_schema.transactions
    GROUP BY user_id
    
  2. 将上面的查询集成到下面的查询中。下面的工作正常。

    SELECT *, t.amount / POWER(10, cd.exponent) * fx.rate AS usd_equivalent
    FROM new_schema.transactions t
    JOIN new_schema.fx_rates fx ON t.currency = fx.ccy
    JOIN new_schema.currency_details cd ON t.currency = cd.currency
    WHERE fx.base_ccy = "USD" 
        AND t.state = "COMPLETED" 
        AND t.type = "CARD_PAYMENT"
    HAVING usd_equivalent > 10;
    

基本上,除了我在第二个查询中执行的操作之外,我还需要在应用上述操作后created_date每次都获取最早的记录。user_id如何丰富我当前的查询以促进这一点?

标签: mysqlsql

解决方案


您可以使用窗口函数:

SELECT *, t.amount / POWER(10, cd.exponent) * fx.rate AS usd_equivalent
FROM (SELECT t.*,
              MIN(created_date) OVER (PARTITION BY user_id) as first_created_date
      FROM new_schema.transactions t
     ) t JOIN
     new_schema.fx_rates fx
     ON t.currency = fx.ccy JOIN
     new_schema.currency_details cd
     ON t.currency = cd.currency
WHERE fx.base_ccy = 'USD' AND
      t.state = 'COMPLETED' AND
      t.type = 'CARD_PAYMENT'
HAVING usd_equivalent > 10;

推荐阅读