sql - 我只需要 Min

标签 sql sql-server tsql min

我有一个查询需要返回每个 ID 本月的最低余额。我遇到的问题是它返回多个余额而不是 Balance 上的最小余额。 我不断得到这样的结果:

ID      Name   Month     Year  TodayMonth   TodayYear  BalMin 
1        A      4         12     4            2012      10,000.00 
1        A      4         12     4            2012      20,000.00

当我需要它返回最低余额时:

ID      Name   Month     Year  TodayMonth   TodayYear  BalMin 
1        A      4         12     4            2012      10,000.00

这是我目前所拥有的:

SELECT DISTINCT
     TOP (100) PERCENT History.ID, info.Name, DATEPART(mm, History.ReportDate) AS Month, DATEPART(yy,History.ReportDate) AS Year, DATEPART(mm, { fn CURDATE() }) AS TodayMonth, DATEPART(yy, { fn CURDATE() }) AS TodayYear, MIN(History.Balance) AS BalMin
    FROM         History LEFT OUTER JOIN Info ON History.ID = Info.ID
    WHERE     (DATEPART(yy, History.ReportDate) = DATEPART(yy, { fn CURDATE() })) AND (DATEPART(mm, History.ReportDate) = DATEPART(mm, 
                          { fn CURDATE() })) AND (History.Balance > 0)
    GROUP BY History.ID, History.ReportDate, Info.Name, History.Balance
    ORDER BY History.ID

最佳答案

您的 group by 不应包括 balance(因为您在其上运行 min),并且您可能应该使用您在选择中使用的 datepart (否则你不会按月分组)。 left join 也没有意义,因为您无论如何都要在 where 子句中查找非空记录。这可能有效:

SELECT History.ID,
    Info.Name,
    DATEPART(mm, History.ReportDate) AS [Month],
    DATEPART(yy, History.ReportDate) AS [Year],
    MIN(History.Balance) AS BalMin
FROM History
    JOIN Info ON History.ID = Info.ID
WHERE (DATEPART(yy, History.ReportDate) = DATEPART(yy, { fn CURDATE() }))
    AND (DATEPART(mm, History.ReportDate) = DATEPART(mm, { fn CURDATE() }))
    AND (History.Balance > 0)
GROUP BY History.ID,
    DATEPART(mm, History.ReportDate),
    DATEPART(yy, History.ReportDate),
    Info.Name
ORDER BY History.ID

如您所见,我还删除了 distincttop 关键字。 Distinct 对于 group by 通常是不必要的(如果不是代码味道),我假设您的 top 用于调试或订购 View ,你是哪个should probably not do .

关于sql - 我只需要 Min,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10247975/

相关文章:

sql - 为什么插入单行比一次插入 x 行快 x 倍

sql - 从XML文件插入

performance - 如果 IN 子句没有值,如何返回所有行?

MySQL - 如何将列转为行?

mysql - 有没有办法按照在子句中输入的顺序显示 INNER JOIN 条目?

sql - 两列上的 group by 索引

sql-server - 将 SQL Server 存储过程结果与附加文本连接起来

sql - 定期删除 SQL 中的行

sql - 如何建立自己的SQL解析器?

php - 在 SQL 中获取具有相同 id 的行总和到 PHP