Reputation: 47
I have a query which basically is grouping the total sum by day
SELECT CountDate, SUM(Max_Count) as MaximumCount, SUM(Min_Count) as MinimumCount
FROM countTable
WHERE countId IN ('48', '34', '65', '63', '31', '64', '86')
AND CountDate BETWEEN '2014-08-14' AND '2014-08-16'
GROUP BY CountDate
ORDER BY CountDate
The output result will be
Date | Maximum | Minimum
------------|-----------|----------------------
2014-08-14 | 3018234 | 3014212
2014-08-15 | 3023049 | 3018510
2014-08-16 | 3026813 | 3023244
I want the query to get the difference between the MaximumCount of the last day and the MinimumCount of the first day.
The result of the query should be the maximum of the last day i.e. 2014-08-16 : 3026813 minus (-) the minimum of the first day i.e. 2014-08-14 | 3014212. Therefore 3026813 - 3014212
Any help how I could achieve this will be much appreciated.
Upvotes: 0
Views: 920
Reputation: 47
With reference to Jithin Shaji answer, I've got the result by this query
DECLARE @STARTDATE DATE = '2014-08-14'
DECLARE @ENDDATE DATE = '2014-08-16'
DECLARE @NOOFDAYS INT = datediff(day, @STARTDATE, @ENDDATE)
SELECT A.CountDate,
A.MaximumCount - B.MinimumCount AS CountSum
FROM (
SELECT CountDate,
SUM(Max_Count) AS MaximumCount,
SUM(Min_Count) AS MinimumCount
FROM countTable
WHERE countId IN ('48','34','65','63','31','64','86')
AND CountDate BETWEEN @STARTDATE AND @ENDDATE
GROUP BY CountDate) A
LEFT JOIN (
SELECT DATEADD(DAY, @NOOFDAYS, CountDate) AS CountDate,
SUM(Max_Count) AS MaximumCount,
SUM(Min_Count) AS MinimumCount
FROM countTable
WHERE countId IN ('48','34','65','63','31','64','86')
AND CountDate BETWEEN @STARTDATE AND @ENDDATE
GROUP BY DATEADD(DAY, @NOOFDAYS, CountDate)) B
ON A.CountDate = B.CountDate
Upvotes: 0
Reputation: 6073
I think this will be correct.
DECLARE @STARTDATE DATE = '2014-08-14'
DECLARE @ENDDATE DATE = '2014-08-16'
SELECT A.CountDate,
B.MaximumCount - A.MinimumCount
FROM (
SELECT CountDate,
SUM(Max_Count) AS MaximumCount,
SUM(Min_Count) AS MinimumCount,
FROM countTable
WHERE countId IN ('48','34','65','63','31','64','86')
AND CountDate BETWEEN @STARTDATE AND @ENDDATE
GROUP BY CountDate) A
LEFT JOIN (
SELECT DATEADD(DAY,CountDate,1) CountDate
SUM(Max_Count) AS MaximumCount,
SUM(Min_Count) AS MinimumCount,
FROM countTable
WHERE countId IN ('48','34','65','63','31','64','86')
AND CountDate BETWEEN BETWEEN @STARTDATE AND @ENDDATE
GROUP BY DATEADD(DAY,CountDate,1)) B
ON A.CountDate = B.CountDate
Upvotes: 0
Reputation: 6222
SELECT
(SELECT [Maximum] FROM TABLE WHERE Date = (SELECT MAX(Date) FROM TABLE)) -
(SELECT [Minimum] FROM TABLE WHERE Date = (SELECT MIN(Date) FROM TABLE))
FROM TABLE
Upvotes: 1