You are actually going to need 3 queries:
Query 1 is going to aggregate the sums for each state.
Query 2 is going to get the state and last date
Query 3 will join the above queries.
Here is the table structure and some of your data withing it.
DECLARE @Data TABLE (
dDate DATE,
dSite VARCHAR(32),
Blck INT,
Knock INT,
Purchased DECIMAL(5,2),
Rate DECIMAL(5,4)
)
INSERT @data VALUES
('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)
Now for the first query; getting the sum for each site
SELECT dSite
, sumBlock = SUM(Blck)
, sumKnock = SUM(Knock)
, sumPurch = SUM(Purchased)
, sumRate = SUM(Rate)
FROM @Data
GROUP BY dSite
And the second query for Sites and the latest date
SELECT dSite
, maxDate = Max(dDate)
FROM @Data
GROUP BY dSite
And for the final query... we are going to join these by using them as subqueries
SELECT b.maxDate, a.*
FROM (
SELECT dSite
, sumBlock = SUM(Blck)
, sumKnock = SUM(Knock)
, sumPurch = SUM(Purchased)
, sumRate = SUM(Rate)
FROM @Data
GROUP BY dSite ) AS a
INNER JOIN (
SELECT dSite
, maxDate = Max(dDate)
FROM @Data
GROUP BY dSite ) AS b ON a.dSite = b.dSite
ORDER BY b.maxDate, a.dSite