Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z konstrukcja zapytania sql, Przemapowanie kolumn z tabeli na inną postać
tvister
post 12.12.2011, 12:11:21
Post #1





Grupa: Zarejestrowani
Postów: 253
Pomógł: 29
Dołączył: 18.08.2008

Ostrzeżenie: (0%)
-----


Witam
mam mały problem z konstrukcja sql-ki do widoku
Mam tabele:
produkt, cena, data_start, data_stop
paprykarz, 10, 05-06-2011, 10-07-2011
fasola,5, 04-12-2011, 12-11-2011
paprykarz,11, 10-07-2011, 12-12-2011
paprykarz,15, 10-07-2011, null

Każda zmiana ceny jest odnotowywana przepisaniem dat.

Potrzebuje wyciągnąc dane w postaci:
data, produkt, akcja, stara cena, nowa cena
10-07-2011, paprykarz, wzrost ceny, 10, 11

Mam wrażenie że kiedyś był taki problem poruszany ale nie moge go znalaźć, więc byłbym wdzieczny za linka.

Rozwiąząłem problem, dla potomnych podaje draft sql-ki.

  1. SELECT t.product_id, , t.start_date AS action_date, t.action_type, t.old_price, t.new_price
  2. FROM ( SELECT product.product_id, product.start_date,
  3. CASE
  4. WHEN avg(product.product_price) OVER v_window <> product.product_price THEN 'change'::text
  5. ELSE 'add'::text
  6. END AS action_type, 1 AS x_order, 
  7. CASE
  8. WHEN first_value(product.product_price) OVER v_window <> last_value(product.product_price) OVER v_window THEN first_value(product.product_price) OVER v_window
  9. ELSE 0::numeric
  10. END AS old_price, last_value(product.product_price) OVER v_window AS new_price
  11. FROM product
  12. WINDOW v_window AS (PARTITION BY product.product_id ORDER BY product.start_date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
  13. UNION
  14. SELECT do1.product_id, do1.end_date AS action_date, 'del'::text AS action_type, 2 AS x_order, 0 AS new_price, 0 AS old_price
  15. FROM product do1
  16. WHERE do1.product_end_date IS NOT NULL AND NOT (do1.product_id IN ( SELECT do2.product_id
  17. FROM product do2
  18. WHERE do2.product_id = do1.product_id AND do2.start_date = (do1.nd_date + 1)))) t
  19.  
  20. JOIN product USING (product_id)
  21.  
  22. ORDER BY t.product_id, t.start_date, t.x_order;


--------------------
Kto rano wstaje ten leje jak z cebra.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.04.2024 - 07:01