تقرير لوحة المعلومات - المواضيع بدون رد

لتغيير تنسيق التاريخ من 10-22 إلى Oct-22 في PostgreSQL، يمكنك استخدام الدالة TO_CHAR. تسمح لك هذه الدالة بتنسيق التواريخ بطرق مختلفة، على سبيل المثال:

SELECT
TO_CHAR(TO_DATE('10-22', 'MM-YY'), 'Mon-YY') AS formatted_date

في بيان SQL هذا:

  • TO_DATE('10-22', 'MM-YY') يحول السلسلة النصية 10-22 إلى نوع تاريخ باستخدام التنسيق MM-YY.
  • TO_CHAR(..., 'Mon-YY') يقوم بعد ذلك بتنسيق هذا التاريخ لعرض اسم الشهر المختصر متبوعًا بالسنة، مما ينتج عنه Oct-22.

إليك مثال آخر لهذا بناءً على إصدار استعلام Topics with No Response مع المعلمة interval التي تمت مشاركتها أعلاه:

-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2025-01-01
-- null int :category_id
-- boolean :include_subcategories = false
-- text :interval = month

WITH no_response_total AS (
  SELECT *
  FROM (
    SELECT t.id, t.created_at, MIN(p.post_number) first_reply
    FROM topics t
    LEFT JOIN posts p ON p.topic_id = t.id AND p.user_id != t.user_id AND p.deleted_at IS NULL AND p.post_type = 1
    WHERE t.archetype <> 'private_message'
      AND t.deleted_at ISNULL
      AND (
        :category_id IS NULL
        OR t.category_id = :category_id
        OR (
          :include_subcategories
          AND t.category_id IN (
            SELECT id FROM categories WHERE parent_category_id = :category_id
          )
        )
      )
    GROUP BY t.id
  ) tt
  WHERE tt.first_reply IS NULL OR tt.first_reply < 2
)

SELECT
  TO_CHAR(date_trunc(:interval, nrt.created_at)::date, 'Mon-YY') AS period,
  COUNT(nrt.id) AS topics_without_response
FROM no_response_total nrt
WHERE nrt.created_at::date BETWEEN :start_date AND :end_date
GROUP BY period, date_trunc(:interval, nrt.created_at)::date
ORDER BY date_trunc(:interval, nrt.created_at)::date ASC

للرجوع إليها، ستبدو نتائج هذا الاستعلام كالتالي:

period topics_without_response
Dec-23 123
Jan-24 455
Feb-24 789
… …