SQL返回不同的结果和不必不同的列

SQL返回不同的结果和不必不同的列,sql,sql-server,Sql,Sql Server,我有一个包含许多列的表,但我只需要从表返回5列,它们是: Name | Charge Code | Charge Amount | Modifier | Date 我希望返回的字段只基于不同的名称,收费代码,收费金额和修饰符。日期可以是记录存在的最新日期。我该怎么做 目前我有: Select Name, Charge_code, Charge_amount, Modifier, Date From Table1 group by Name, Charge_code

我有一个包含许多列的表,但我只需要从表返回5列,它们是:

Name | Charge Code | Charge Amount | Modifier | Date
我希望返回的字段只基于不同的名称,收费代码,收费金额和修饰符。日期可以是记录存在的最新日期。我该怎么做

目前我有:

Select 
    Name, Charge_code, Charge_amount, Modifier, Date
From 
    Table1
group by 
    Name, Charge_code, Charge_amount, Modifier
但是,当我这样做时,它告诉我日期在选择列表中无效,因为它既不包含在聚合函数中,也不包含在group by中。我不想在group by function中包含日期,因为它会返回一堆不必要的无关行。但我确实想让日期显示那个人收取该金额的最晚日期

我也试过了

Select 
    Date, Distinct Name, Charge_Code, Charge_amount, Modifier
From 
    Table 1
如果我是新手,任何想法都会有帮助


谢谢

典型的方法是使用
行编号()


典型的方法是使用
行编号()


你也可以试试这个,简单易行

Select name, 
    charge_code, 
    charge_amount, 
    modifier, 
    max(date) date
From table1
Group by name, charge_code, charge_amount, modifier

你也可以试试这个,简单易行

Select name, 
    charge_code, 
    charge_amount, 
    modifier, 
    max(date) date
From table1
Group by name, charge_code, charge_amount, modifier

这看起来是一个非常不同的设置比我预想的。这张桌子很大,效率有多高?我以前从未在查询中使用过seqnum或row_number。请查看更新后的帖子,看看这是否仍然有效senese@TaylorD . . . 性能应该比
groupby
@TaylorD好。row_number()和其他分析函数的语法需要一些时间才能习惯,但我向您保证,对于查询优化器来说,它与任何其他等效函数(至少在大多数情况下)一样高效,而且通常效率要高得多。如果您习惯了,分析函数将大大提高代码的质量,前提是您也有一个良好的索引策略,比较执行计划以证明选项,等等。即使我有其他不需要使用的列,我是否仍然使用t.*呢?@TaylorD。没有必要避免这种情况。SQL Server在只选择查询中使用的列方面会很有效,外部的
select
会限制这些列。这看起来与我预期的设置非常不同。这张桌子很大,效率有多高?我以前从未在查询中使用过seqnum或row_number。请查看更新后的帖子,看看这是否仍然有效senese@TaylorD . . . 性能应该比
groupby
@TaylorD好。row_number()和其他分析函数的语法需要一些时间才能习惯,但我向您保证,对于查询优化器来说,它与任何其他等效函数(至少在大多数情况下)一样高效,而且通常效率要高得多。如果您习惯了,分析函数将大大提高代码的质量,前提是您也有一个良好的索引策略,比较执行计划以证明选项,等等。即使我有其他不需要使用的列,我是否仍然使用t.*呢?@TaylorD。没有必要避免这种情况。SQL Server在只选择查询中使用的列方面会很有效,而外部的
select
会限制列。这对于这种特殊情况非常有效(事实上应该是最佳的),但我仍然鼓励使用row_number()-它对于此查询应该同样有效,并且更加灵活。例如,如果您想从具有
max(date)
值的同一行/记录中获取其他随机列值,可以使用row_number()轻松完成,但不能使用简单的分组方式。只是说…我同意这是一个更简单的理解为我一个初学者知道发生了什么。另一个似乎也很有效,但这一个我至少可以说它做得更好一些。谢谢这对于这种特殊情况是完全有效的(事实上应该是最优的),但是我仍然鼓励使用row_number()-它对于这个查询应该同样有效,并且更加灵活。例如,如果您想从具有
max(date)
值的同一行/记录中获取其他随机列值,可以使用row_number()轻松完成,但不能使用简单的分组方式。只是说…我同意这是一个更简单的理解为我一个初学者知道发生了什么。另一个似乎也很有效,但这一个我至少可以说它做得更好一些。非常感谢。
Select name, 
    charge_code, 
    charge_amount, 
    modifier, 
    max(date) date
From table1
Group by name, charge_code, charge_amount, modifier