Adrian Stolarski
Acg N. .
Temat: pytanie o pobranie rekordów z miesiąca poprzedniego
Podajesz numery wybranych miesięcy ręcznie, czy to ma być automat dla wszystkich miesięcy?Tabela i dane:
CREATE TABLE tab(id INT IDENTITY(1, 1), cos VARCHAR(10), miesiac INT, rok INT)
INSERT INTO tab VALUES('aaa', 10, 2000)
INSERT INTO tab VALUES('bbb', 10, 2000)
INSERT INTO tab VALUES('ccc', 10, 2000)
INSERT INTO tab VALUES('ddd', 10, 2000)
INSERT INTO tab VALUES('xxx', 11, 2000)
INSERT INTO tab VALUES('yyy', 11, 2000)
INSERT INTO tab VALUES('aaa', 11, 2000)
INSERT INTO tab VALUES('ddd', 11, 2000)
INSERT INTO tab VALUES('zzz', 11, 2000)
Kwerenda
* nie wiem, jaki silnik bazy danych Cię interesuje, ale zapytanie jest ANSI92 więc powinno działać wszędzie.
** nie wiem, czy ID to (alfa)numeryczny identyfikator (kod) tego "Coś" czy po prostu klucz główny (unikalne wartości)? Jeśli ID to identyfikator "Cosia", to można joinować po nim. Jeśli to klucz tabeli, to jako atrybut złączenia pozostaje jedynie "Coś". Należy wtedy założyć indeks na "Coś", bo inaczej wyszukiwanie będzie wolne.
SELECT t1.id, t1.cos, t1.miesiac, t1.rok
FROM
(SELECT * FROM tab WHERE miesiac = 10) t1
LEFT JOIN
(SELECT * FROM tab WHERE miesiac = 11) t2
ON t1.cos=t2.cos
WHERE t2.cos IS NULL
Wynik:
id cos miesiac rok
2 bbb 10 2000
3 ccc 10 2000
Lub prościej (ale mniej elastycznie):
SELECT cos FROM tab WHERE miesiac = 10
EXCEPT
SELECT cos FROM tab WHERE miesiac = 11
cosTen post został edytowany przez Autora dnia 10.10.14 o godzinie 15:21
bbb
ccc
Marcin
Mackiewicz
Programista JAVA, RS
Adware Polska
Temat: pytanie o pobranie rekordów z miesiąca poprzedniego
Kolega powiedział:"Te rekordy, które są w poprzednim miesiącu a nie są w bieżącym".
Do zapytań SQL dodałbym jeszcze zamiast miesięcy na sztywno wyliczenie miesięcy. Dla PostgreSQL przykładowo to
-- Miesiąc bieżący
SELECT DATE_PART('month', NOW())
-- Miesiąc poprzedni
SELECT DATE_PART('month', NOW()) - 1
W MySQL:
-- Miesiąc bieżący
SELECT MONTH(CURDATE());
-- Miesiąc poprzedni
SELECT MONTH(CURDATE()) - 1
Acg N. .
Temat: pytanie o pobranie rekordów z miesiąca poprzedniego
No nie bardzo. Kolega napisał:[...]w miesiacu poprzednim i nie wystepują w danym miesiacu?
A zatem nie bieżącym, lecz danym, a to zasadnicza różnica. Dany miesiąc może być bieżącym, jeśli tak został ustawiony. Chodzi o porównanie listy produktów z dwóch kolejnych miesięcy, z których późniejszy jest zadawany przez użytkownika. W ogólnym przypadku nie będzie to zatem ani NOW() ani CURDATE().
Wiedząc, o jaki silnik chodzi, można podać kod z użyciem zmiennej, z której zostanie wyliczony miesiąc poprzedni w stosunku do zadanego.Ten post został edytowany przez Autora dnia 12.10.14 o godzinie 06:30
Marcin
Mackiewicz
Programista JAVA, RS
Adware Polska
Temat: pytanie o pobranie rekordów z miesiąca poprzedniego
Masz rację. Mój błąd.Eh to moje czytanie ze zrozumieniem po meczu :)
Podobne tematy
-
Bazy Danych » pytanie: ORACLE 10g wyrażenie IN -
-
Bazy Danych » Ograniczenie liczby wprowadzonych rekordów w czasie -
-
Bazy Danych » Optymalizacja bazy danych mySQL bądź przejście na inną... -
-
Bazy Danych » pytanie o widoki w postgresql (POSTGIS) i unikalny klucz -
-
Bazy Danych » Plik DBF pytanie? -
-
Bazy Danych » Pytanie o pracę -
-
Bazy Danych » [PHP][MySQL] Problem z aktualizacją rekordów. -
-
Bazy Danych » Postgresql - widok i wydajność, pytanie -
-
Bazy Danych » Pytanie początkujacego. -
-
Bazy Danych » Pytanie o studia podyplomowe. -
Następna dyskusja: