相关疑难解决方法(0)

多列的SQL MAX?

如何在每行最多的几列中返回1个值:

表名

[Number, Date1, Date2, Date3, Cost]
Run Code Online (Sandbox Code Playgroud)

我需要返回这样的东西:

[Number, Most_Recent_Date, Cost]
Run Code Online (Sandbox Code Playgroud)

查询?

sql t-sql sql-server

343
推荐指数
10
解决办法
48万
查看次数

如何在Postgres/SQL中获得两个整数的最小值/最大值?

如何在Postgres/SQL中找到两个整数的最大值(或最小值)?其中一个整数不是列值.

我将给出一个示例场景:

我想从列中减去一个整数(在所有行中),但结果不应小于零.所以,首先,我有:

UPDATE my_table
SET my_column = my_column - 10;
Run Code Online (Sandbox Code Playgroud)

但这可能会使一些价值观变为负面.我想要的(伪代码)是:

UPDATE my_table
SET my_column = MAXIMUM(my_column - 10, 0);
Run Code Online (Sandbox Code Playgroud)

postgresql

132
推荐指数
2
解决办法
6万
查看次数

从多列中选择最小值的最佳方法是什么?

给出SQL Server 2005中的下表:

ID   Col1   Col2   Col3
--   ----   ----   ----
1       3     34     76  
2      32    976     24
3       7    235      3
4     245      1    792
Run Code Online (Sandbox Code Playgroud)

编写产生以下结果的查询的最佳方法是什么(即产生最终列的查询 - 包含每行的Col1,Col2和Col3中的minium值的)?

ID   Col1   Col2   Col3  TheMin
--   ----   ----   ----  ------
1       3     34     76       3
2      32    976     24      24
3       7    235      3       3
4     245      1    792       1
Run Code Online (Sandbox Code Playgroud)

更新:

为了澄清(正如我在演讲中所说),在真实场景中,数据库已正确规范化.这些"数组"列不在实际表中,而是在报表中所需的结果集中.新要求是报告还需要此MinValue列.我无法更改基础结果集,因此我期待T-SQL获得一个方便的"走出监狱卡".

我尝试了下面提到的CASE方法并且它有效,尽管它有点麻烦.它也比答案中说明的更复杂,因为你需要满足同一行中有两个最小值的事实.

无论如何,我想我会发布我目前的解决方案,鉴于我的限制,它的效果非常好.它使用UNPIVOT运算符:

with cte (ID, Col1, Col2, Col3)
as
(
    select ID, …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2005 min

67
推荐指数
9
解决办法
20万
查看次数

如何计算Oracle SQL中两个数字的最大值?

这应该很简单,并显示我的SQL无知:

SQL> select max(1,2) from dual;
select max(1,2) from dual
       *
ERROR at line 1:
ORA-00909: invalid number of arguments
Run Code Online (Sandbox Code Playgroud)

我知道max通常用于聚合.我可以在这里使用什么?

最后,我想使用类似的东西

select total/max(1,number_of_items) from xxx;
Run Code Online (Sandbox Code Playgroud)

其中number_of_items是一个整数,可以是0.我想在这种情况下也看到总数.

sql oracle max

27
推荐指数
3
解决办法
7万
查看次数

在SQL中,是否存在非聚合最小/最大运算符

有没有类似的东西

select max(val,0)
from table
Run Code Online (Sandbox Code Playgroud)

我不是要找到整个表的最大值

必须有一个比这更简单的方法吗?

select case when val > 0 then val else 0 end
from table
Run Code Online (Sandbox Code Playgroud)

编辑:我正在使用Microsoft SQL Server

sql sql-server

10
推荐指数
1
解决办法
3081
查看次数

T-SQL相当于Excel"MAX"函数返回两个数字中较大的一个

可能重复:
SQL Server中是否有Max函数需要两个值,如.NET中的Math.Max?

在Excel中,有一个名为"MAX"的函数接受数字并返回集合中最大的数字.T-SQL中是否有一个复制此功能的功能?我找不到一个,我写了一个为我做的UDF,但我觉得值得问.

这是我一直在使用的功能:

CREATE FUNCTION dbo.LargerOf
(
    -- Add the parameters for the function here
    @First FLOAT,
    @Second FLOAT
)
RETURNS FLOAT
AS
BEGIN

    DECLARE @Result FLOAT

    IF @First > @Second
        SET @result = @First
    ELSE
        SET @Result = @Second

    RETURN @Result

END
GO
Run Code Online (Sandbox Code Playgroud)

我不希望任何运气,但我认为我至少要问,而不是将我的功能转移到一大堆新服务器上.谢谢!

t-sql sql-server excel

9
推荐指数
2
解决办法
2万
查看次数

Sql Server中的标量Max

如何在Sql server中实现标量MAX(如Math.Max).(在本质上我想实现类似Max(表达式,0)的东西,使负值替换为0.)

我已经在其他线程中看到了解决方案

  • 创建标量函数(性能如何?)
  • 表达式> 0时表达式ELSE 0) (那么"表达式"被评估两次?)
  • Max(聚合)的复杂用法.

什么是最好的?为什么Sql Server没有这样内置的东西?我看不到任何并发症?

sql sql-server

6
推荐指数
2
解决办法
4371
查看次数

SQL - 选择一行中的最大值

我似乎被困在这个问题上,环顾四周找不到解决方案。

我有一个 SQL 表,第一行看起来像这样:

Name   Val1   Val2   Val3
John   1000   2000   3000
Run Code Online (Sandbox Code Playgroud)

我需要做的是选择该行中的最大值,即3000

显然,如果这些值位于列而不是行中,您可以使用它SELECT MAX(column) FROM table来获取列中的最大值。是否有与此等效的方法来查找一行中的最大值?

我还查看了PIVOT和的用法UNPIVOT,但我认为它们对我没有用。

我能够做到这一点的唯一方法是创建一个临时表并将每个值插入到单个列中,如下所示:

CREATE TABLE #temp (colvals float)
     INSERT INTO #temp (colvals)
          SELECT Val1 FROM table WHERE ID=1
         UNION
          SELECT Val2 FROM table WHERE ID=1
         UNION
          SELECT Val3 FROM table WHERE ID=1
--------------------------------------------
SELECT MAX(colvals) FROM #temp
--------------------------------------------
DROP TABLE #temp
Run Code Online (Sandbox Code Playgroud)

然而,我觉得这相当慢,特别是因为我的表的列比上面显示的片段多得多。

有任何想法吗?

提前致谢。

sql ssms max

6
推荐指数
1
解决办法
1万
查看次数

T-SQL中日期的最小/最大函数

我创建了以下函数来确定两个日期之间的MAX日期.运行函数注释中的一个SELECT语句大约需要00.030到00.050秒.

有更好的表现和更清洁的方式吗?

/* Returns the greater of two dates.

    SELECT dbo.fnMaxDate(NULL      , NULL)
    SELECT dbo.fnMaxDate('1/1/2011', NULL)
    SELECT dbo.fnMaxDate(NULL      , '1/1/2011')
    SELECT dbo.fnMaxDate('1/1/2011', '1/1/2011')
    SELECT dbo.fnMaxDate('1/2/2011', '1/1/2011')
    SELECT dbo.fnMaxDate('1/1/2011', '1/2/2011')

*/
ALTER FUNCTION dbo.fnMaxDate 
(
    @Date1 DATETIME,
    @Date2 DATETIME
)
RETURNS datetime
AS
BEGIN

    DECLARE @Result DATETIME

    IF @Date1 IS NULL AND @Date2 IS NULL

        SET @Result = NULL;

    ELSE IF @Date1 IS NULL

        SET @Result = @Date2

    ELSE IF @Date2 IS NULL

        SET @Result = @Date1

    ELSE
        IF @Date1 >= …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server-2008

4
推荐指数
1
解决办法
4985
查看次数

SQL/T-SQL - 如何从N列中的1列中获取MAX值?

在SQL/Transact SQL中,我试图更新临时表以从3个不同的日期列(在该临时表中)中获取最新日期,并将该MAX日期放入"最新日期"列.

使用更新语句,最好的方法是什么?

sql t-sql

3
推荐指数
1
解决办法
1万
查看次数