Time to first response by group members

إنه ليس كذلك. بصراحة، لست متأكدًا كيف نجح الأمر في أي وقت مضى. سأنشر إصدارًا محدثًا قريبًا وسأقوم بتنبيهك لإعلامك بأنه جاهز.

تعديل: @IreneT
إليك نسخة ثابتة من الاستعلام الأصلي. سأتجاهل هذا الاستعلام وألقي نظرة على الاستعلامات الأخرى التي نشرتها في هذا الرد بدلاً من ذلك. أخبرني إذا كانت لديك أي أسئلة حول الاستعلامات، أو إذا واجهت أي مشاكل في إضافة المعلمات المطلوبة إلى الاستعلامات. من خلال الاختبار اليوم، أجد أنه يجب عليّ تحديث الصفحة بعد حفظ استعلام مستكشف البيانات للسماح بظهور حقول إدخال المعلمات أسفل الاستعلام. (قد يكون هذا مجرد خلل في موقع التطوير المحلي الخاص بي.)

-- [params]
-- int :months_ago = 1

WITH query_period AS (
SELECT
date_trunc('month', CURRENT_DATE) - INTERVAL ':months_ago months' as period_start,
date_trunc('month', CURRENT_DATE) - INTERVAL ':months_ago months' + INTERVAL '1 month' - INTERVAL '1 second' as period_end
),
staff_responses AS (
SELECT
DISTINCT ON (p.topic_id)
p.topic_id,
p.created_at,
t.category_id,
EXTRACT(MINUTE FROM (p.created_at - t.created_at)) AS response_time
FROM posts p
JOIN topics t
ON t.id = p.topic_id
AND t.category_id = ANY ('{46,25,43,40,44,35,22,7,20,17,6,12}'::int[])
JOIN users u
ON u.id = p.user_id
WHERE p.post_number > 1
AND u.admin = 't' OR u.moderator = 't'
ORDER BY p.topic_id, p.created_at
),
user_topics AS (
SELECT
t.id
FROM topics t
JOIN users u
ON u.id = t.user_id
WHERE u.admin = 'f' AND u.moderator = 'f'
)

SELECT
sr.category_id,
AVG(sr.response_time) AS "Average First Response Time",
COUNT(1) AS "Topics Responded to"
FROM staff_responses sr
JOIN query_period qp
ON sr.created_at >= qp.period_start
AND sr.created_at <= qp.period_end
JOIN user_topics t
ON t.id = sr.topic_id
GROUP BY sr.category_id

ما تم تغييره هو:

--DATE_TRUNC('minute', p.created_at - t.created_at) AS response_time
EXTRACT(MINUTE FROM (p.created_at - t.created_at)) AS response_time

سأندهش لو كنت قد كتبت الاستعلام القديم دون اختباره. على أي حال، يعمل الإصدار المحدث كما هو متوقع الآن.

من الذاكرة، تم كتابة هذا الاستعلام لموقع معين ولم يكن مخصصًا للنشر على Meta. إليك استعلامان مفيدان آخران للحصول على معلومات حول أوقات استجابة الموظفين:

الوقت المستغرق لأول استجابة جماعية للمواضيع التي تم إنشاؤها خلال فترة زمنية معينة

يعيد الوقت المستغرق لأول استجابة من قبل عضو في مجموعة معينة للمواضيع “العادية” (وليس الرسائل الشخصية) التي أنشأها مستخدم ليس عضوًا في المجموعة المعطاة. يتم تعيين معلمة الاستعلام :group_name إلى “staff” افتراضيًا. مع هذه القيمة، سيعطي الوقت المستغرق لأول استجابة من قبل أعضاء فريق العمل. يمكنك تغيير قيمة هذه المعلمة للحصول على أوقات استجابة لمجموعات مختلفة. على سبيل المثال “customer_support”.

لاحظ أنه يجب تقديم التواريخ تقنيًا بالشكل yyyy-mm-dd، ولكن الاستعلام سيقبل أيضًا التواريخ بالشكل dd-mm-yyyy.

-- [params]
-- date :start_date
-- date :end_date
-- string :group_name = staff

WITH group_response_times AS (
    SELECT
        t.category_id,
        t.id AS topic_id,
        EXTRACT(MINUTE FROM (p.created_at - t.created_at)) AS response_time_minutes,
        p.user_id AS staff_user_id,
        ROW_NUMBER() OVER (PARTITION BY t.id ORDER BY p.created_at) AS row_num
    FROM posts p
    JOIN topics t ON t.id = p.topic_id
    WHERE t.user_id NOT IN (SELECT user_id
                                FROM group_users gu JOIN groups g ON g.id = gu.group_id
                                WHERE gu.user_id > 0 AND g.name = :group_name)
        AND p.user_id IN (SELECT user_id
                              FROM group_users gu JOIN groups g ON g.id = gu.group_id
                              WHERE gu.user_id > 0 AND g.name = :group_name)
        AND t.archetype = 'regular'
        AND t.deleted_at IS NULL
        AND p.post_type = 1
        AND p.deleted_at IS NULL
        AND t.created_at BETWEEN :start_date AND :end_date
)

SELECT
    category_id,
    topic_id,
    staff_user_id,
    response_time_minutes
FROM group_response_times
WHERE row_num = 1
ORDER BY category_id, response_time_minutes

متوسط الوقت لأول استجابة جماعية لكل فئة:

يستخدم نفس منطق الاستعلام السابق، ولكنه يعيد متوسط الوقت لأول استجابة من قبل أعضاء المجموعة المعطاة لكل فئة للمواضيع التي أنشأها مستخدمون ليسوا أعضاء في المجموعة المعطاة خلال الفترة الزمنية المحددة بواسطة معلمات :start_date و :end_date. كما هو الحال مع الاستعلام السابق، إذا تُركت معلمة :group_name بقيمتها الافتراضية “staff”، فستعيد متوسط أوقات الاستجابة الأولى لفريق العمل للمواضيع العادية التي أنشأها مستخدمون ليسوا من فريق العمل.

-- [params]
-- date :start_date
-- date :end_date
-- string :group_name = staff

WITH group_response_times AS (
    SELECT
        t.category_id,
        t.id AS topic_id,
        EXTRACT(MINUTE FROM (p.created_at - t.created_at)) AS response_time_minutes,
        p.user_id AS staff_user_id,
        ROW_NUMBER() OVER (PARTITION BY t.id ORDER BY p.created_at) AS row_num
    FROM posts p
    JOIN topics t ON t.id = p.topic_id
    WHERE t.user_id NOT IN (SELECT user_id
                                FROM group_users gu JOIN groups g ON g.id = gu.group_id
                                WHERE gu.user_id > 0 AND g.name = :group_name)
        AND p.user_id IN (SELECT user_id
                              FROM group_users gu JOIN groups g ON g.id = gu.group_id
                              WHERE gu.user_id > 0 AND g.name = :group_name)
        AND t.archetype = 'regular'
        AND t.deleted_at IS NULL
        AND p.post_type = 1
        AND p.deleted_at IS NULL
        AND t.created_at BETWEEN :start_date AND :end_date
)

SELECT
    category_id,
    AVG (response_time_minutes) AS average_response_time_minutes,
    COUNT(*) AS num_topics_with_staff_responses
FROM group_response_times
WHERE row_num = 1
GROUP BY category_id

@JammyDodger، ربما استبدل الاستعلام في المنشور الأصلي بالاستعلامين الأخيرين في هذا المنشور. أيضًا، ربما قم بتحديث العنوان إلى شيء مثل “الوقت المستغرق لأول استجابة من قبل أعضاء المجموعة”.

3 إعجابات