Sql 与另一列值对应的列的最小值

Sql 与另一列值对应的列的最小值,sql,sql-server,Sql,Sql Server,下面是我从数据库中提取的数据表 type week amount a 201304 77 a 201304 77 a 201304 77 a 201304 77 a 201304 71 a 201304 71 a 201305 77 a 201305 77 a 201305 77 a 201305 77 a 201305 77

下面是我从数据库中提取的数据表

  type   week  amount
    a   201304  77
    a   201304  77
    a   201304  77
    a   201304  77
    a   201304  71
    a   201304  71
    a   201305  77
    a   201305  77
    a   201305  77
    a   201305  77
    a   201305  77
    a   201305  77
我试图从
amount
列中仅提取每周的最小值,因此该表应如下所示

  type   week  amount
    a   201304  71
    a   201305  77

感谢您的帮助

您可以使用min和in子句

 select * from my_table 
 where (amount, week ) in (
    select min(amount), week from my_table group by week 
 );

可以使用min和in子句

 select * from my_table 
 where (amount, week ) in (
    select min(amount), week from my_table group by week 
 );
试一试

这样做的目的是将行号分配给仅包含周和金额的分区。你可能每周有很多钱。这将对它们进行编号,然后对它们进行排序,以便最小的将位于顶部(第1行)。在where子句中只得到这一行。无论是哪种类型,每周都会产生最低量。

试试看


这样做的目的是将行号分配给仅包含周和金额的分区。你可能每周有很多钱。这将对它们进行编号,然后对它们进行排序,以便最小的将位于顶部(第1行)。在where子句中只得到这一行。无论是哪种类型,这将每周产生最低金额。

这一常规的
分组有什么问题

SELECT type, week, MIN(amount) amount
FROM table_name
GROUP BY type, week
编辑 如果你在同一周内有不同的类型,数量相同,你想做什么?如果您想知道哪种类型在一周内的最小值(金额):

SELECT DISTINCT t2.*
FROM
 (SELECT week, MIN(amount) amount
    FROM table_name
    GROUP BY week) t1
  JOIN table_name t2 ON t1.amount = t2. amount AND t1.week = t2.week

这个常规的
分组方式有什么问题

SELECT type, week, MIN(amount) amount
FROM table_name
GROUP BY type, week
编辑 如果你在同一周内有不同的类型,数量相同,你想做什么?如果您想知道哪种类型在一周内的最小值(金额):

SELECT DISTINCT t2.*
FROM
 (SELECT week, MIN(amount) amount
    FROM table_name
    GROUP BY week) t1
  JOIN table_name t2 ON t1.amount = t2. amount AND t1.week = t2.week

除了问题之外,您还应该包括到目前为止的代码(努力回答您的问题)。还请包括一个特定的问题或错误,以及在问题本身中重现该问题所需的最短代码。请参阅:并阅读。除了问题之外,您还应该包括到目前为止的代码(努力回答您的问题)。还请包括一个特定的问题或错误,以及在问题本身中重现该问题所需的最短代码。请参阅:并阅读。您不能在where子句中使用rownumber,因为SQL在计算结果集时无法理解别名。此外,where子句中也不能使用窗口函数。但是,您可以从select中选择作为子select或公用表expression@Matt谢谢你的指导。我编辑了我的答案。如果仍然存在任何错误,请告诉我。您不能在where子句中使用rownumber,因为SQL在计算结果集时无法理解别名。此外,where子句中也不能使用窗口函数。但是,您可以从select中选择作为子select或公用表expression@Matt谢谢你的指导。我编辑了我的答案。如果还有什么不正确的地方,请告诉我。