1

Temat: wyszukiwanie

Witam, mam problem z następującym zapytaniem. W bazie danych dany Sn_id jest nie powtarzalny natomiast występuje wielokrotnie podczas różnego rodzaju przesunięć magazynowych. Zapytanie ma na celu wyciągnąć ostatnie info dla danego SN. Info czyli dokument oraz magazyn w którym się znajduje. I teraz jeżeli zapytanie dotyczy tylko jednego SN_ID to temat jest dość prosty, kłopot zaczyna się gdy SN mamy więcej niż 1. SN do zapytania wrzucam za pomocą IN ('xxx', 'tyyy') ale wyskakują mi wszystkie transakcje magazynowe w których dany SN występował:( a mnie interesuje tylko ostatnia.:(

Poniżej struktura:
app.inventory_document_tab zawiera kolumny:
inventory_document_type_id    character varying    Id typu dokumentu ( to chcemy mieć na raporcie)
inventory_document_id    integer    Id dokumentu
date_created    timestamp without time zone    Data utworzenia ( to chcemy mieć na raporcie)

2ga tabela to:
app.inventory_document_transaction_tab zawiera kolumny:
inventory_document_transaction_id    integer    Id transakcji
inventory_document_id    integer    Id dokumentu
inventory_part_id    integer    Id pozycji magazynowej
inventory_location_id    character varying    Id lokalizacji magazynowej (to chcemy mieć na raporcie)

3cia tabela to:
app.inventory_part_tab zawiera kolumny:
inventory_part_no    character varying    Nr inwentarzowy
serial_no    character varying    Numer seryjny urządzenia (to chcemy mieć na raporcie)
inventory_part_id    integer    Id pozycji w ewidencji

dodatkowo jezeli sn nie ma w magazynie to powinna byc informacja na jakim dokumencie ostatnio występował dany SN.

Ostatnio edytowany przez lukaszp (2012-01-19 18:05:36)

2

Odp: wyszukiwanie

Nie bardzo to rozumiem, po pierwsze Sn_id wg tego co napisałeś nie występuje w żadnej z tych trzech tabeli (może chodzi o app.inventory_part_tab.serial_no ?). Po drugie lepiej by było gdybyś umieścił to zapytanie do którego doszedłeś, nawet jeśli "wyskakują wszystkie transakcje", to mnie w ten sposób łatwiej zobaczyć jaka logika wchodzi tutaj w grę, a po trzecie dobrze by było gdybyś oprócz samych nazw i typów kolumn dodał informację o powiązaniach (klucze główne, obce itd. ).

Ostatnio edytowany przez gszpetkowski (2012-01-19 21:04:40)

3

Odp: wyszukiwanie

sorka za brak precyzji, SN_ID to jest serial_no i po tym polu będziemy szukać. Co do zapytania doszedłem do poniższego ale coś nie działa:( to miasło na celu wyszukanie wszystkich transakcji dla danego SN poukładać wg daty i ograniczyć do jednego rekordu dzięki czemu otrzymamy ostatni rekord jaki jest w bazie dla danego sn i do tego rekordu dopisujemy resztę potrzebnych danych.(ale tak jak mówie coś nie działa):

SELECT
    (SELECT
    idt.date_created AS "Data kreacji",
    ipt.serial_no AS "SN",
    idtypet.name AS "TYPDOK"
    FROM
    app.inventory_part_location_tab iplt
    LEFT JOIN app.inventory_document_transaction_tab idtt ON idtt.inventory_part_id=iplt.inventory_part_id,
    app.inventory_document_tab idt,
    app.inventory_document_type_tab idtypet,
    app.inventory_part_tab ipt
    WHERE
    idt.inventory_document_id=idtt.inventory_document_id
    AND idtypet.inventory_document_type_id=idt.inventory_document_type_id
    AND ipt.inventory_part_id=iplt.inventory_part_id
    ORDER BY idt.date_created DESC
    LIMIT 1)
AND ipt.serial_no IN ('222-333-444')

powiązanie tabel:
tabela1-tabela2 wg ID_DOKUMENTU
tabela2-tabela3 wg inventory_part_id

Ostatnio edytowany przez lukaszp (2012-01-20 15:31:32)