SQL Plus SYSDATE Использование? - PullRequest
0 голосов
/ 14 февраля 2012

Я задал предыдущий вопрос о той же схеме, но я пишу, как решить эту проблему, и я помню, что слышал кое-что о SYSDATE, но я не совсем уверен, что это такое и как правильно его использовать ... вотсхема, проблема и моя попытка.

Проблема: представление с именем ProblematicMachine, в котором перечислены все сведения о машинах, для которых было открыто более 5 билетов за предыдущий месяц (т. е. если мы запустимпросмотреть в октябре, затем в нем перечислены билеты, для которых было подано более 5 билетов в сентябре, и если мы запустим его в ноябре, в нем будут перечислены билеты, для которых более 5 заявок было подано в октябре и т. д.)* Мое решение без SYSDATE:

CREATE OR REPLACE VIEW ProblematicMachine AS 
SELECT machine_name, IP, network_port, MACADDR, location_id 
FROM Inventory, Tickets
WHERE    *this is where i was gonna use the condition of the 
 SYSDATE i guess SYSDATE - 30 (for days). 

SCHEMAS

TECH PERSONNEL (pplSoft, fname, lname, pittID, expertise, office phone) 
where fname is first name, and lname is last name.

USERS (pplSoft, fname, lname, pittID, office phone)

CATEGORIES (category id, category, description) where this table lists 
all possible categories of submitted tickets.

INVENTORY(machine name, IP, network port, MACADDR, location id)

LOCATIONS(location id, location, building, notes)

TICKETS (ticket number, owner pplSoft, date submitted, date closed, 
days worked on, category id, machine name, location, description)

ASSIGNMENT (ticket number, tech pplSoft, date assigned, status) 
where status held is an enumeration, could be: assigned, 
in progress, delegated, closed successful, or closed unsuccessful.

1 Ответ

3 голосов
/ 14 февраля 2012

Если вы спрашиваете, как узнать, какие билеты были открыты в прошлом месяце, вам нужно что-то вроде

SELECT *
  FROM tickets
 WHERE trunc( date_opened, 'MM' ) = trunc( add_months(sysdate,-1), 'MM' );

Индекс на основе функций для trunc( date_openend, 'MM' ) будет полезен с точки зрения производительности длязапрос такого рода (при условии, что в конечном итоге у вас будет много месяцев данных).Если вы хотите использовать индекс только для date_opened, вам нужно что-то более похожее на

SELECT *
  FROM tickets
 WHERE date_opened >= trunc( add_months(sysdate, -1), 'MM' )
   AND date_opened <  trunc( sysdate, 'MM' )

Если вы спрашиваете что-то еще, вам нужно быть более конкретным.

В предложенном вами представлении вы не указываете никаких условий соединения.Вам понадобятся некоторые условия соединения, чтобы объединить две таблицы.

...