Q&A for linguists, teachers and learners wanting to discuss the finer points of the Portuguese language
/* BEST TIME TO ASK QUESTIONS
The best time here is when the delay between a question and an accepted
answer is shortest.
On the graph, look for the value on the x-axis that
corresponds to the minimum value on y-axis.
That's the best time to ask questions as defined above.
As for Dec 2013, the smallest time-to-answer was for questions asked
on Saturday at 1pm GMT. The asker had to wait for only 78 minutes.
- X: Hours, days of week, or both
1.0 is Sunday, 12am GMT; 3.5 means Tuesday, 12pm GMT.
- Y: Time-to-answer. The average difference between the time when
the question was created and when the accepted answer was created.
- All: Include all users of only one specified by UserId
Values: 0 - show stats for one user, 1 - for all users
- Frequency: The scale of X-axis
Values: 1 - hours, 2 - day of week, 3 - both
- MaxTimeDiff: The cut off value for time difference. All time-to-answer
above this value will be excluded from the statistics.
Default value: 1440 min (24 hours).
- UserId: Whose stats to include in calculations. Matters only when All = 0.
Values: Your user ID or someone else's.
DECLARE @All int = ##All:int?1##
DECLARE @Frequency int = ##Frequency:int?3##
DECLARE @MaxTimeDiff int = ##MaxTimeDiff:int?1440##
DECLARE @UsedId int = ##UserId:int##
DECLARE @YearsBack int = ##YearsBack:int?1##
;WITH tmp AS
SELECT TimeDiff = DATEDIFF(minute, q.CreationDate, a.CreationDate),
Period = CASE @Frequency
WHEN 1 THEN DATEPART("hour", q.CreationDate)
WHEN 2 THEN DATEPART("weekday", q.CreationDate)
WHEN 3 THEN ROUND((CAST(DATEPART("weekday", q.CreationDate) AS numeric) +
CAST(DATEPART("hour", q.CreationDate) AS numeric) / 24), 2) END
FROM Posts q
LEFT OUTER JOIN Posts a ON q.AcceptedAnswerId = a.Id
WHERE q.AcceptedAnswerId > 0
AND q.OwnerUserId = CASE WHEN @All = 1 THEN q.OwnerUserId ELSE @UsedId END
AND q.CreationDate > DATEADD("year", -1, CURRENT_TIMESTAMP)
AND q.CreationDate < DATEADD("year", 0, CURRENT_TIMESTAMP)
SELECT Period as [period], COUNT(*) AS n,
ROUND(AVG(CAST(TimeDiff AS FLOAT)), 2) AS [att]
WHERE ABS(TimeDiff) < @MaxTimeDiff
GROUP BY Period
ORDER BY Period