PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Höchster Wert als Suchkriterium


ZOOTV
05.05.2008, 15:28:50
Grüß Euch.
Bisher hat mir euer Forum immer wieder weiterhelfen können - ein Dank gilt der frei zugänglichen Suche. Ist nicht immer so, dass diese benutzt werden kann.

Heute musste ich mich aber direkt als User anmelden, da meine Problemstellungen immer komplizierter werden und ich einfach gerne Meinungen erfahrener User direkt besprechen möchte.

Ich stehe derzeit vor einer für mich sehr komplizierten Aufgabe.

Ich habe ein Datenbank mit mehreren Tabellen, welche per Excelimport befüllt werden.
der Befüllintervall geschieht 1x jährlich.
Bei jedem Befüllvorgang wird die Jahreszahl der Datenaufzeichnung in gewisse Felder/Tabellen der Datenbank geschrieben (siehe nachfolgend Spalte YEAR).

Ich verwende folgenden String um Daten aus 3 Tabellen auszugeben:
================
SELECT Company_Name, Description, Category, Economic_Impact, Savings, Investment, Brochure, m.Year
FROM Company AS c
INNER JOIN Measure AS m ON c.Company_ID = m.Company_ID
INNER JOIN Measure_Language AS ml ON m.Measure_ID=ml.Measure_ID
WHERE Planed=1 AND Company_Active='true'
ORDER BY c.Company_Name, m.Brochure
================

Die Abfrage funktioniert, jedoch habe ich ein Problem bei der Spalte YEAR.


Problem 1:
Ich habe 2 verschiedene Werte in der Spalte YEAR.
Wenn ein Unternehmen jetzt seine Excell-Tabellen in die Db importiert dann sind die Daten im Normafall aus dem Jahr zuvor (also 2007).
Es gibt aber Unternehmen welche zum ersten Mal importieren - deren Daten sind dann aus dem Jahr 2006.

In der Tabelle ml habe ich nach meiner Abfrage folgende Auswertung stehen:

Firma1 || Descriptiontext1 || Organisatorische Maßnahme || 2006
Firma1 || Descriptiontext2 || Verfahrenswahl, technologische Änderung || 2006
Firma1 || Descriptiontext3 || Verbreitung einer Idee || 2007
Firma1 || Descriptiontext4 || Verfahrenswahl, technologische Änderung || 2007
Firma1 || Descriptiontext5 || Verfahrenswahl, technologische Änderung || 2007
Firma1 || Descriptiontext6 || Organisatorische Maßnahme || 2006
Firma1 || Descriptiontext7 || Organisatorische Maßnahme || 2006
Firma1 || Descriptiontext8 || Organisatorische Maßnahme || 2006
Firma1 || Descriptiontext9 || Organisatorische Maßnahme || 2007

Firma2 || Descriptiontext1 || Organisatorische Maßnahme || 2006
Firma2 || Descriptiontext2 || Verfahrenswahl, technologische Änderung || 2006
Firma2 || Descriptiontext3 || Verbreitung einer Idee || 2006
Firma2 || Descriptiontext4 || Verfahrenswahl, technologische Änderung || 2006
Firma2 || Descriptiontext5 || Verfahrenswahl, technologische Änderung || 2006


Firma 1+2 nehmen AKTIV (Bedingung in WHERE Clausel) teil und haben auch heuer wieder Daten importiert.

Ich brauche aber nur die zuletzt importierten Daten.
Von Firma 1 alle aus 2007
Von Firma 2 alle aus 2006

Hättet ihr da einen Tipp für mich?
Danke
ZOOTV

Franzx
05.05.2008, 15:36:37
Hallo ZOOTV und herzlich Willkommen als aktiver User in diesem Forum!
Vielleicht habe ich auf die Schnelle etwas übersehen, doch was spricht gegen:


... WHERE Planed=1 AND Company_Active='true' AND YEAR = '2006'
ORDER BY c.Company_Name, m.Brochure


Grüße, Franz

ZOOTV
05.05.2008, 15:47:44
Hallo Franzx, danke für die Antwort.

Mittels diesem String möchte ich Standartisierte Abfragen erstellen.
Der User klickt auf einen Link und es öffnet sich ein *.csv File mit der Auswertung.
Da tu ich mir schwer mit dem Eintragen eines fixen Wertes.

Meine User sitzen rund um den ganzen Erdball und verwenden diese Abfragen unabhängig, je nach Befüllvorgang.


Deswegen würde ich ein Argument wie:
Liste alle ZULETZT eingetragenen Maßnahmen
benötigen.

Aktiv=true sagt mir nur das das Unternehmen derzeit teilnimmt.
Es kommt vor das Unternehmen pausieren usw.
Deswegen immer den höchsten Wert der SPalte YEAR je UNTERNEHMEN.

Franzx
05.05.2008, 16:05:23
Ok, kann ich verstehen!

Das die Daten von Firma 1 aus 2007 sein müssen und von Firma 2 aus 2006 ergibt sich ja automatisch, da es die zuletzt eingetragenen Daten sind!

Da hilft wohl ein Zähler. Den größten Jahreswert für eine Firma ermitteln.


$topwert = "SELECT YEAR FROM Company WHERE ... ORDER BY YEAR DESC LIMIT 1";



... WHERE Planed=1 AND Company_Active='true' AND YEAR = '$topwert'
ORDER BY c.Company_Name, m.Brochure


Wie wärs hiermit?

ZOOTV
05.05.2008, 16:15:59
Ich glaub ich muss nochwas ergänzen.

1.) Ich benötige dieses Kriterium innerhalb meines MySQL Strings.
2. Aktuelles Jahr -1 geht nicht, da bei manchen Ländern der Import im Dezember erfolgt, also Importdaten 2008 und bei anderen Länder z.B. Österreich Mai 2008 also Daten aus 2007 vorhanden sind.

zu 1.) Ich benötige dieses Suchkriterium in mehreren Abfragen.
Kann man dies eventuell als Variabel oder PRozedur innerhalb des MySQL Servers speichern?

ZOOTV
06.05.2008, 15:34:13
Mir ist noch etwas eingefallen.

Ich habe eine Tabelle mit dem Titel Imported_Info.
Hier habe ich von jeder Firma einen Eintrag mit folgenden Werten:
CompID | YEAR | File
12 2007 xx.xls
11 2007 xx.xls
12 2006 xx.xls
11 2006 xx.xls
10 2005 xx.xls
usw.

Ich hätte gerne dieses Ergebnis:
CompID | YEAR
12 2007
11 2007
10 2005

Könntet ihr mir bitte eventuell hier weiterhelfen?

Tumasch
21.05.2008, 18:11:03
WHERE Year = (SELECT max(Year) FROM Tabelle WHERE Firma = XYZ)