How to get the data between two timestamps using sql server - sql

I have a table where data will be Inserting every 15 min. so time stamp will be as follows
table Name: tblresultset
ID Date count
1 2017-05-03 1:15:00 10
2 2017-05-03 1:16:00 11
3 2017-05-03 1:27:00 2
4 2017-05-03 1:28:00 3
5 2017-05-03 1:29:00 6
6 2017-05-03 1:30:00 8
7 2017-05-03 1:31:00 2
8 2017-05-03 1:32:00 1
9 2017-05-03 1:33:00 2
Now I am looking for the query which will get me the total count from
2017-05-03 1:15 to 2017-05-03 1:30
I have to get this kind of count for each 15 min interval on the given date.
Could anybody help me out please?

Use group by and datediff:
GROUP BY DATEDIFF(MINUTE, '1990-01-01T00:00:00', date) / 15
See this post for more info.

Related

How can i create a new column count in SQL table where count=1 if hours column >=6 else count=0

I aim to first achieve this
id
employee
Datelog
TimeIn
TimeOut
Hours
Count
5
Two
2022-08-10
09:00:00
16:00:00
07:00:00
1
4
Two
2022-08-09
09:00:00
16:00:00
07:00:00
1
3
Two
2022-08-08
09:00:00
16:00:00
07:00:00
1
2
One
2022-08-05
09:00:00
16:00:00
07:00:00
1
1
Two
2022-08-04
09:00:00
10:00:00
01:00:00
0
and now my main objective here is to give a bonus of 2k to employees whose Totalcount per month >=3.
employee
Month
TotalCount
Bonus
Two
August
3
2000
One
August
1
0
Here's the answer using Postgres. It's pretty much generic other than extracting the month out of datelog that might have a slightly different syntax.
select employee
,max(date_part('month', datelog ))
,count(*)
,case when count(*) >= 3 then 2000 else 0 end as bonus
from t
where hours >= time '06:00:00'
group by employee
employee
max
count
bonus
Two
8
3
2000
One
8
1
0
Fiddle

Big query- get last date of every month in a year

Iam trying to extract only the last dates of every month in a year.
SELECT
*
FROM
UNNEST(GENERATE_DATE_ARRAY('2018-04-30', '2027-03-31', INTERVAL 1 MONTH)) AS example
ORDER BY 1 ASC
I am getting
1 2018-04-30
2 2018-05-30
3 2018-06-30
4 2018-07-30
5 2018-08-30
6 2018-09-30
7 2018-10-30
8 2018-11-30
9 2018-12-30
10 2019-01-30
EXPECTATION:
31/01/2013
28/02/2013
31/03/2013
30/04/2013
31/05/2013
30/06/2013
31/07/2013
31/08/2013
30/09/2013
31/10/2013
30/11/2013
31/12/2013
31/01/2014
28/02/2014
31/03/2014
30/04/2014
31/05/2014
30/06/2014
31/07/2014
31/08/2014
30/09/2014
31/10/2014
30/11/2014
31/12/2014
31/01/2015
28/02/2015
You could generate an array of the first day of each month and then subtract one day to get the last day of the previous month:
SELECT DATE_SUB(example, INTERVAL 1 DAY)
FROM UNNEST(GENERATE_DATE_ARRAY('2018-05-1', '2027-04-01', INTERVAL 1 MONTH)) AS example
Consider below approach
SELECT LAST_DAY(example, MONTH) last_day_of_month
FROM UNNEST(GENERATE_DATE_ARRAY('2018-04-30', '2027-03-31', INTERVAL 1 MONTH)) AS example

SQL Calculate the rate of growth of the indicator over time

I have a postgres table like this:
datesdate
nametext
valuesreal
2017-05-01
A
1
2017-05-02
A
3
2017-05-02
B
10
2017-05-03
A
6
2017-05-04
A
12
2017-05-03
B
10
2017-05-04
B
10
2017-05-05
B
11
how can I calculate the rate of growth of the indicator over time with SQL, and get the following table
datesdate
nametext
valuesreal
growthreal
2017-05-01
A
1
NULL
2017-05-02
A
3
2
2017-05-02
B
10
NULL
2017-05-03
A
6
3
2017-05-04
A
12
6
2017-05-03
B
10
0
2017-05-04
B
10
0
2017-05-05
B
11
1
Examle for A:
2017-05-01 (1)
2017-05-02 (3 )
2017-05-03 (6)
2017-05-04 (12)
I am calculating the difference in metric between adjacent dates And got the follow
2017-05-01 (NULL)
2017-05-02 (3-1 =2)
2017-05-03 (6-3 = 3)
2017-05-04 (12-6=6)
You can use LAG() window function here if your table is having previous dates without gap:
Try this:
select
*,
values-(lag(values) over(partition by name order by dates)) "growth"
from test
DEMO

How to group by hour in HANA

I have the following table in HANA :
vehicle_id time roaming_time parking_time
1 Sep 01,2016 3:09:03 AM 3 9
2 Sep 01,2016 3:12:03 AM 6 8
1 Sep 01,2016 9:10:03 AM 10 6
4 Sep 01,2016 10:09:03 AM 9 3
1 Sep 01,2016 10:10:03 AM 10 10
4 Sep 01,2016 12:09:03 AM 3 9
from these information I wanted to know that what is the sum of roaming_time and sum of parking_time for each hour from all the vehicles and want the output in the format:
time roaming_time parking_time
____ _____________ ____________
2016-09-01 00:00:00 3 9
2016-09-01 01:00:00 6 8
2016-09-01 02:00:00 9 6
2016-09-01 03:00:00 3 6
2016-09-01 04:00:00 12 3
2016-09-01 05:00:00 15 8
2016-09-01 06:00:00 18 4
2016-09-01 07:00:00 8 3
2016-09-01 08:00:00 9 4
2016-09-01 09:00:00 6 6
2016-09-01 10:00:00 6 9
........
2016-09-01 23:00:00 3 12
I need to group the following query which gives all the sum by hour wise and get the expected result:
select sum(roaming_time) as roaming_time,sum(parking_time) as parking_time
from time>='2016-09-01 00:00:00'
time>='2016-09-01 23:59:59'
I do not know how to do the grouping by hour in HANA. Any help is appreciated
Here is one method . . . it converts the time to a date and hour format:
select to_varchar(time, 'YYYY-MM-DD'), hour(time),
sum(roaming_time) as roaming_time, sum(parking_time) as parking_time from t
group by date(time), hour(time)
order by to_varchar(time, 'YYYY-MM-DD'), hour(time);
Use a group by clause with SERIES_ROUND(). Avoid date() and hour() and similar data/time functions on large data sets as they tend to be slower.
select SERIES_ROUND(time, 'INTERVAL 1 HOUR') as time,
sum(roaming_time) as roaming_time, sum(parking_time) as parking_time from t
group by SERIES_ROUND(time, 'INTERVAL 1 HOUR')
order by SERIES_ROUND(time, 'INTERVAL 1 HOUR');
Another approach is to convert it to a string, especially if no further time calculations are required.
This could look like this:
select to_varchar(time, 'DD.MM.YYYY HH24') as parking_hour ,
sum(roaming_time) as roaming_time, sum(parking_time) as parking_time from t
group by to_varchar(time, 'DD.MM.YYYY HH24') as parking_hour
order byto_varchar(time, 'DD.MM.YYYY HH24') as parking_hour;

SQL How Many Employees Are Working, Group By Hour

I have a table, a timetable, with check-in and check-out times of the employees:
ID Date Check-in Check out
1 1-1-2011 11:00 18:00
2 1-1-2011 11:00 19:00
3 1-1-2011 16:00 18:30
4 1-1-2011 17:00 20:00
Now I want to know how many employees are working, every (half) hour.
The result I want to see:
Hour Count
11 2
12 2
13 2
14 2
15 2
16 3
17 3
18 2,5
19 1
Every 'Hour' you must read as 'till the next full hour', ex. 11 -> 11:00 - 12:00
Any ideas?
Build an additional table, called Hours, containing the following data:
h
00:00
00:30
01:00
...
23:30
then, run
Select h as 'hour' ,count(ID) as 'count' from timetable,hours where [Check_in]<=h and h<=[Check_out] group by h