Skip to content
Advertisement

How do I use ROW_NUMBER in MySQL to check number of rows per day per employee?

I’m storing punch-in and punch-out data in a table that looks like so:

id empid punchtime
74 4 2021-08-04 17:11:54
171 4 2021-08-06 13:47:45
202 4 2021-08-09 10:14:01
271 4 2021-08-09 18:20:01
308 4 2021-08-10 11:14:54
343 4 2021-08-10 14:46:21
349 4 2021-08-10 15:22:10
380 4 2021-08-10 18:10:58
406 4 2021-08-11 10:13:48

I want to check for punch in vs. punch out per day. So each odd n-th punch is considered a punch in, and each even n-th punch is considered a punch out. I also have a table with employee information, i.e. employee ID and name.

Here’s my SQL query:

The problem with this query is that the datediff can only compare against one day at a time. How do I compare against each day so that each day has its own in/out values?

The result of the SQL query:

id EmpID PunchTime Name RN inOutCol
406 4 2021-08-11 10:13:48 redacted 1 IN
380 4 2021-08-10 18:10:58 redacted 8 OUT
349 4 2021-08-10 15:22:10 redacted 7 IN
343 4 2021-08-10 14:46:21 redacted 6 OUT
308 4 2021-08-10 11:14:54 redacted 5 IN
271 4 2021-08-09 18:20:01 redacted 4 OUT
202 4 2021-08-09 10:14:01 redacted 3 IN
171 4 2021-08-06 13:47:45 redacted 2 OUT
74 4 2021-08-04 17:11:54 redacted 1 IN

The result I’m looking for:

id EmpID PunchTime Name RN inOutCol
406 4 2021-08-11 10:13:48 redacted 1 IN
380 4 2021-08-10 18:10:58 redacted 4 OUT
349 4 2021-08-10 15:22:10 redacted 3 IN
343 4 2021-08-10 14:46:21 redacted 2 OUT
308 4 2021-08-10 11:14:54 redacted 1 IN
271 4 2021-08-09 18:20:01 redacted 2 OUT
202 4 2021-08-09 10:14:01 redacted 1 IN
171 4 2021-08-06 13:47:45 redacted 1 IN
74 4 2021-08-04 17:11:54 redacted 1 IN

Advertisement

Answer

You may try changing datediff(PunchTime, '2021-08-11')=0 to DATE(PunchTime). This will extract just the date portion of your datetime value and thus as desired partition your data by each day.

Let me know if this works for you.

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement