对多个日期使用 sum 但只保留最新日期

ces*_*sco -3 sql t-sql sql-server group-by sum

我有一个名为Prospect的表,看起来像这样,我正在尝试对值求和,以便我只有 1 列表示 GEORGIA、ALABAMA、TEXAS,并且日期字段中的日期是最新的日期条目。

 Date            Sight        Blck   Knock  Purchased   Rate
 2020-02-13      GEORGIA       11      6      54.55     0.0385
 2020-02-13      GEORGIA        1      1      100       0.0035
 2020-02-14      GEORGIA        2      0       0        0.007
 2020-02-12      ALABAMA        2      0       0        0.007
 2020-02-15      ALABAMA        2      0       0        0.007
 2020-02-16      ALABAMA        2      1       50       0.007
 2020-04-08      TEXAS          2      0       0        0.007
 2020-04-18      TEXAS          2      0       0        0.007
 2020-05-10      TEXAS          1      0       0        0.005
Run Code Online (Sandbox Code Playgroud)

我想要一个看起来像这样的结果集

Date         Sight   Blck   Knock   Purchased   Rate
2020-02-14  GEORGIA   14     7      154.55      0.049
2020-02-16  ALABAMA    6     1      50          0.021
2020-05-10  TEXAS      5     0       0          0.019 
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的,但总结不正确:

SELECT cast (Date as date)
    , Sight
    , SUM(CAST(Blck AS INT))
    , SUM(CAST(Knock AS INT))
    , SUM(CAST(Purchased AS money))
    , SUM(CAST(Rate AS money))
FROM Prospect
GROUP BY cast(Date as Date)
    , [Blck]
    , [Knock]
    , [Purchased]
    , [Rate]
Run Code Online (Sandbox Code Playgroud)

感谢您的任何反馈

Dal*_*e K 6

我想你想要:

  1. 使用max以获得最新的日期。
  2. group by sight 仅,对于您想要汇总金额的所有其他列。
SELECT MAX(cast(Date as date))
    , Sight
    , SUM(CAST(Blck AS INT))
    , SUM(CAST(Knock AS INT))
    , SUM(CAST(Purchased AS money))
    , SUM(CAST(Rate AS money))
FROM Prospect
GROUP BY Sight;
Run Code Online (Sandbox Code Playgroud)

真的需要这么多演员吗?如果您在表定义中使用了正确的数据类型,则以下内容将起作用:

SELECT MAX([Date])
    , Sight
    , SUM(Blck)
    , SUM(Knock)
    , SUM(Purchased)
    , SUM(Rate)
FROM Prospect
GROUP BY Sight;
Run Code Online (Sandbox Code Playgroud)