Autor Beitrag
julia24
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 17.02.15 01:46 
Hallo,
ich habe eine kleine Frage. Ich möchte alle viertel Stunde Daten aus einer Datenbank ablesen.
Dazu habe ich Daten in der Datenbank die als Unixzeitstempel abgespeichert sind.
Als BeginngDate und EndDate. Wenn ich jetzt hieraus Daten innerhalb der 15 min/ 900s auslesen will, kann ich ja nicht einfach EndDate-BeginingDate machen oder? Ich muss doch relativ aufwendig die Minuten erstmal rausfiltern und es dann berechnen. Oder gibt es da auch einen einfachen weg?

Vielen Dank schon mal für die Hilfe.


Moderiert von user profile iconChristian S.: Topic aus Basistechnologien verschoben am Di 17.02.2015 um 09:32
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 17.02.15 10:31 
Kannst Du bitte nochmal besser formulieren, was Du machen willst? :)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
julia24 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 17.02.15 17:02 
Ich will eigentlich nur, alle 15 Minuten Daten aus einer Datenbank auslesen.

Zur verfügung habe ich BeginnDate und EndDate.

Alle 900sekunden (aka 15 Min) sollen die Daten in eine neue Datenbank als
Statistik eingelesen werden.

Konnte ich mich nun verständlich ausdrücken ?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 17.02.15 17:37 
Ist immer noch nicht klarer. Für uns heißt das du möchtest alle 15 Minuten eine Abfrage an eine Datenbank senden. Dann führ das halt alle 15 Minuten aus z.b. mit einem Timer. Fertig.
Du willst wahrscheinlich was bestimmtest mit bestimmten Einschränkungen regelmäßig ausführen. Wir wissen aber weder womit (ADO.NET, Linq2Sql, EF, ORM etc.) noch wogegen und was genau du willst.

Zitat:
kann ich ja nicht einfach EndDate-BeginingDate machen oder


Das klingt z.B. jetzt eher danach das du rausfinden möchtest ob etwas länger als 15 Minuten gedauert hat. Das wäre was völlig anderes als etwas alle 15 Minuten auszuführen.

Für diesen Beitrag haben gedankt: Christian S.
julia24 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 17.02.15 23:21 
Es geht im Prinzip um Einkäufe innerhalb einer bestimmten Zeit.
Ich will in eine andere Datenbank im 15 minuten Takt Aufträge aufnehmen.
Also alles was zwischen 0:01 und 0:15 getätigt wurde ist bei mir der Zeitstempel 1.
Also alles was zwischen 0:16 und 0:30 getätigt wurde ist bei mir der Zeitstempel 2.

Datenbank (SQL Server 2008, Visual Studio 2013 Premium)

Datenbank soll dann wie folgt aussehen

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
ProduktId  Zeitstempel WurdeVerkauft  IstRückläufig IstKaputt

1          1               15             2           1

1          2               23             6           3

2          1               35             0           4

2          2               23             0           0

3          1               10             0           0





Alle diese Innformationen ziehe ich aus einer anderen Datenbank die jeden einzelnen Einkauf aufnimmt.


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
EinkaufId   ProduktId  Costumer BeginnDate EndDate 

1             1          1

2             2          2

3             1          3

4             3          4



Und im BeginnDate und EndDate sind Unixzeitstempel...

Mein Code lautet momentan wie folgt. Da ist nun alles drin nur die Zeit noch nicht


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var validSales = (from sale in sales
join product in products on sale.ProductId equals product.Id
where sale.IsValid && product.IsActive)
GroupBy(sale => sale.ProduktID)
.Select(group => new {
ID= group.Key,
Name = group.FirstOrDefoult().Produkt,
CountNichtRückläufig = group.Count(c => c.NichtRückläufig )
})

select sale;


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Code-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 17.02.15 23:40 
Zitat:
Ich will in eine andere Datenbank im 15 minuten Takt Aufträge aufnehmen.
Also alles was zwischen 0:01 und 0:15 getätigt wurde ist bei mir der Zeitstempel 1.
Also alles was zwischen 0:16 und 0:30 getätigt wurde ist bei mir der Zeitstempel 2.

Heißt das jetzt du willst alle 15 Minuten eine Ergebniszeile bekommen. Du führst deine Abfrage um 0:15 aus und erhältst die Daten von 0:01 bis 0:15 und dann führst du deine Abfrage um 0:30 aus und erhältst die Daten für 0:16 bis 0:30 oder willst du alle 15 Minuten alle Daten bekommen gruppiert in 15 Minuten Blöcke?
Zitat:
Und im BeginnDate und EndDate sind Unixzeitstempel...

Warum hat ein Einkauf ein Beginn und Ende Zeitpunkt? Für mich findet ein Einkauf zu einen Zeitpunkt statt aber nicht in einem Zeitraum.
Wenn es tatsächlich ein Einkaufzeitraum ist wie hängt der mit deinem 15 Minuten Zeitraum zusammen? Müssen sich die beiden Zeiträume schneiden?
Ist dann auch korrekt das ein Einkauf (da Zeitraum) in mehreren 15 Minuten Blöcken mitgezählt werden soll?
julia24 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mi 18.02.15 03:51 
Ich will einmal am Tag die Daten sammeln.
Dann will ich gruppiert die Daten in 15 min Blöcken haben.

Also wie im Beispiel oben beschrieben.

Das Produkt mit der PruduktId 1 wurde in diesem zeitraum 15 mal verkauft.
Im nächsten Timestamp 38 mal. Um mal ein Beispiel zu nennen.

Das hat ein Beginn und Enddatum. Und wenn das Beginndate im Zeitraum 0.01 bis 0.15
liegen würde und das Enddatum bei 0.17, dann würde es doppelt gezählt werden.
So ist die Vorgabe.


Eigentlich ist es ein Anruf der gezählt wird. Dieser bewegt sich dann in diesem Zeitraum.

Es geht um eine Statistik die zählt wieviel Anrufe getätigt wurden. Und das im viertel Stunden Takt.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 18.02.15 10:43 
Eine reine EF oder Linq2Sql Lösung sehe ich da nicht. Ich würde wohl einen View oder Stored Function in der Datenbank erstellen der mir diese Zeiträume liefert. Ein Ding das nur ganz viele Zeilen mit 2 Spalten von - bis liefert, eben genau immer jeweils deine 15 Minuten Blöcke und damit dann die eigentlichen Daten joinen. Der Join läuft dann über die Schnittmenge des von-bis Zeitraums dieses Views/Stored Function und des BeginnDate-EndDate Zeitraums deiner Einkauf Tabelle über den von-bis Zeitraum läßt sich dann auch einfach gruppieren.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 18.02.15 11:09 
Hallo julia24,

bitte Crossposts - entsprechend unserer Richtlinien - immer angeben: myCSharp.de - Unix Zeitstempel aus Datenbank auslesen sowie SQL Zeit Between BeginnDate und EndDate.