gpt4 book ai didi

sql - 将最小日期和相应的金额返回到该不同的 ID

转载 作者:行者123 更新时间:2023-12-04 06:06:45 24 4
gpt4 key购买 nike

下午

当我有多个相同的日期但欠款列中的值都不同时,我试图在 SQL Server 2005 中返回最小值/最大值。我已经通过我的 select 语句将表过滤到不同查询的临时表中,当我尝试镜像时,我有所有重复的日期,您可以在下面看到。

我现在有一个看起来像这样的表:

ID| Date   |Owes
-----------------
1 20110901 89
1 20110901 179
1 20110901 101
1 20110901 197
1 20110901 510
2 20111001 10
2 20111001 211
2 20111001 214
2 20111001 669

我当前的查询:

Drop Table #Temp

Select Distinct Convert(Varchar(8), DateAdd(dd, Datediff(DD,0,DateDue),0),112)as Date
,ID
,Paid
Into #Temp
From Table
Where Paid <> '0'

Select ,Id
,Date
,Max(Owed)
,Min(Owed)

From #Temp
Group by ID, Date, Paid
Order By ID, Date, Paid

这不会删除我的任何相同日期,我是 SQL 的新手,但我假设它是因为我的 owed 列具有不同的值。我基本上希望能够收回第一个记录,因为这将始终是我的最低支付,而我的最后一个记录将始终是我的最高欠款,以计算出我的 ID 欠款总额。

我是 SQL 的新手,所以想了解我做错了什么,以便我将来了解结构化查询?

非常感谢

最佳答案

在您的“select into”语句中,您没有 Owed 列?

GROUP BY 是您“去除相同值”的常规方式。如果您按 ID 和日期分组,对于这两列中的每对不同值,您将在结果中得到一行。结果中的每一行代表基础表中的所有行,并且聚合函数(如 MIN、MAX 等)可以提取值。

SELECT id, date, MAX(owes) as MaxOwes, MIN(owes) as minOwes
FROM myFavoriteTable
GROUP BY id, date

在 SQL Server 2005 中,有“窗口函数”允许您在不分组的情况下对记录组使用聚合函数。下面的一个例子。表格中的每一行对应一行:

 SELECT id, date, owes, 
MAX(Owes) over (PARTITION BY select, id) AS MaxOwes,
MIN(Owes) over (PARTITION BY select, id) AS MinOwes
FROM myfavoriteTable

如果您将列命名为“MinOwes”,听起来您可能只是在钓鱼。

关于sql - 将最小日期和相应的金额返回到该不同的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8260438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com