الوقت حتى أول رد من مجموعة الدعم

في سياق العمل مع @icaria36 لتحسين استخدامه لمجموعات Discourse كنظام دعم، قمنا بتطوير بعض الاستعلامات (سيتم إضافة المزيد). يُرجى إعلامنا إذا أمكنك اكتشاف أي مشاكل أو اقتراح تحسينات :slight_smile:

الوقت اللازم للحصول على أول رد لمجموعة دعم

  • متوسط عدد الأيام لفترة محددة: (من 2019-04-04 إلى 2019-04-06 كمثال)
  • يُحتسب فقط أيام العمل (أي باستثناء السبت والأحد)
  • لا يُحتسب في العطلات الرسمية المحددة (2019-04-11 كمثال)
  • اسم المجموعة في المثال هو ‘support’
SELECT AVG(t.days)::float AS "متوسط أيام العمل حتى أول رد"
FROM (
  SELECT t.id, t.title, t.created_at, MIN(p.created_at) as "وقت أول رد", (
    SELECT count(*) FILTER (
      WHERE d not in ('2019-04-11')
      AND extract('ISODOW' FROM d) < 6
    )
    FROM generate_series(t.created_at::timestamp::date
                        , MIN(p.created_at)::timestamp::date
                        , interval '1 day') as s(d)
  ) as "الأيام"
  FROM topics t
  INNER JOIN posts p ON p.topic_id = t.id AND (
    CASE WHEN p.post_number = 1
    THEN p.via_email IS TRUE 
    ELSE true 
    END
  )
  WHERE t.archetype = 'private_message'
  AND t.id IN (
    SELECT topic_id FROM topic_allowed_groups
    WHERE group_id IN (SELECT id FROM groups WHERE name ilike 'support')
  )
  AND t.deleted_at IS NULL
  AND t.created_at::timestamp::date >= '2019-04-04'
  AND t.created_at::timestamp::date <= '2019-04-06'
  AND p.deleted_at IS NULL
  AND p.post_number > 1
  GROUP BY t.id
) t

لاختبار عمل الاستعلام بشكل صحيح، يمكنك تغيير SELECT من متوسط إلى:

t.days as "أيام العمل", t.title, t.created_at, t.first_reply_created_at

على سبيل المثال، في بيئة Sandbox الخاصة بي عند تنفيذ ذلك، أحصل على:

ملاحظات:

  • هل ترغب في احتساب الردود في نفس اليوم كـ 0 أم 1؟ (حاليًا هو 1)
  • كيف تريد التعامل مع الرسائل التي لا توجد لها ردود؟ (أي هل يجب استبعادها، أو كم عدد الأيام التي يجب نسبتها إليها؟). حاليًا، تُستبعد الرسائل التي لا توجد لها ردود من العد.

عدد الرسائل المستلمة في مجموعة معينة.

  • اسم المجموعة في المثال هو ‘support’
  • العد لفترة محددة: (من 2019-04-04 إلى 2019-04-06 كمثال)
SELECT count(t) as "عدد الرسائل"
FROM topics t
WHERE t.archetype = 'private_message'
AND t.id IN (
  SELECT topic_id FROM topic_allowed_groups
  WHERE group_id IN (SELECT id FROM groups WHERE name ilike 'support')
)
AND (
  SELECT via_email FROM posts
  WHERE topic_id = t.id AND post_number = 1 
)
AND t.deleted_at IS NULL
AND t.created_at::timestamp >= '2019-04-04'::timestamp
AND t.created_at::timestamp <= '2019-04-06'::timestamp
8 إعجابات