تشريح الوقت في أوراكل / SQL
-
22-08-2019 - |
سؤال
ولدي جدول Oracle كبير العش تحتوي على الصفوف التي تمثل وحدات العمل، مع أعمدة لوقت البدء ووقت الانتهاء بالإضافة إلى البيانات الوصفية الأخرى.
وأنا بحاجة لتوليد الرسوم البيانية الاستخدام من هذه البيانات، نظرا لبعض معايير الترشيح التعسفية وفترة زمنية التقارير. على سبيل المثال، وتبين لي الرسم البياني لجميع الوظائف أليس لفترة 24 ساعة ابتداء من يوم الثلاثاء الماضي في الساعة 7:00 صباحا. وكل صف DB كومة عموديا في الرسم البياني.
ويمكن أن أفعل هذا في لغة عالية المستوى عن طريق الاستعلام عن كافة الصفوف ذات الصلة المحتملة، والوقت التقطيع دلاء كل واحد الى 1 دقيقة، والرسوم البيانية النتيجة. ولكن هناك وسيلة فعالة للقيام بذلك تقطيع الوقت في SQL؟ أم أن هناك تقنيات أوراكل الحالية أن يفعل هذا؟
وشكرا!
المحلول
في شروط الحصول على البيانات بها، يمكنك استخدام "مجموعة من" و " اقتطاع "لشريحة البيانات في فترات 1 دقيقة. على سبيل المثال:
SELECT user_name, truncate(event_time, 'YYYYMMDD HH24MI'), count(*)
FROM job_table
WHERE event_time > TO_DATE( some start date time)
AND user_name IN ( list of users to query )
GROUP BY user_name, truncate(event_time, 'YYYYMMDD HH24MI')
وهذا سوف تعطيك نتائج مثل أدناه (على افتراض هناك 20 الصفوف أليس بين 8.00 و 8.01 و 40 الصفوف بين 8.01 و 8.02):
Alice 2008-12-16 08:00 20
Alice 2008-12-16 08:01 40
نصائح أخرى
وأفضل رهان هو أن يكون هناك جدول (أ مؤقتة ولدت على الطاير سيكون على ما يرام إذا كان الوقت شريحة هو دينامية) ومن ثم الانضمام ضد ذلك.
وهذا يجب أن تفعل ذلك بشكل جيد إلى حد ما. وسوف انهيار لحظة (1/1440 يوم واحد).
SELECT
to_char(Times.time,'hh24:mi'),
count(*)
FROM
(SELECT
time
FROM
dual
WHERE
1=2
MODEL
dimension by ( 0 as key )
measures ( sysdate -1 as time )
rules upsert ( time[ for key from 0 to 1 increment (1/1440) ] = sysdate-1 + cv(key)) ) Times,
job_table
WHERE
begintime <= Times.time
AND
endtime > Times.time
AND
user_name = 'Alice'
GROUP BY
Times.time
ORDER BY
Times.time
وأنا متأكد من أن هناك طريقة أسرع للقيام بذلك، ولكن هذا هو أفضل ما يمكن أن تصل. ويساعد هذا الأمل.