Avatar billede Slettet bruger
14. februar 2013 - 13:02 Der er 11 kommentarer og
1 løsning

Finde tid mellem rækker

Hejsa

Hvis jeg nu har følgende datasæt:

ID    CreateDate            EID        RowNumber
1    2012-07-03 19:53:08.903    592956367    1
1    2012-07-03 19:54:31.710    592956360    2
1    2012-07-03 19:54:42.663    592956354    3
1    2012-07-03 19:58:13.490    592956295    4
1    2012-07-03 19:59:11.767    592956280    5
1    2012-07-03 19:59:25.327    592956275    6
2    2012-07-11 21:51:12.353    604492378    1
2    2012-12-20 12:19:12.363    825417552    1

Hvordan kan jeg så finde tiden mellem rækkerne, men sådan at den stopper ved 6 og starter forfra ved 1 - Altså den må ikke tage tiden mellem 6 og 1 på to forskellige IDer
Avatar billede arne_v Ekspert
14. februar 2013 - 13:12 #1
en while loop med en for loop inden i?
Avatar billede Syska Mester
14. februar 2013 - 13:17 #2
bruger linq og tager en group by på ID( da det lader til at være ens for alle rows der skal sammen lignes.

Så sortere du på RowNumber .... og tager Max og Min af tiden og trækker dem fra hinanden, og så har du tiden for et forløb.

Efter jeg så har skrevet overstående går det måske op for mig det ikke præcis var det du ville.

Men ellers kan du vel stadig bruge den "Group by" på ID, og så bare teste om det er sidste item. Hvis, så ved du at du skal stoppe.

mvh
Avatar billede Slettet bruger
14. februar 2013 - 13:24 #3
Tak! Dog skal det siges jeg er rimelig rookie! Så er der evt. nogle som kan bare hjælpe lidt med noget start kode??

Hvis i ikke helt forstod det.

Så vil jeg have tiden mellem hvert session ID, men starter rownumber forfra, må den sidste sessionid ikke tælle på det nye sessionid med det nye rownumber
Avatar billede Syska Mester
14. februar 2013 - 13:29 #4
I hvad format har du dataen i? Så vil jeg se om jeg kan fikse et eksempel til dig i aften.
Avatar billede Slettet bruger
14. februar 2013 - 13:39 #5
C#

/* Microsoft SQL Server Integration Services Script Component
*  Write scripts using Microsoft Visual C# 2008.
*  ScriptMain is the entry point class of the script.*/

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
    int rowNumber = 0;
    Guid PrevID;
   
    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {

       





        //if (PrevID== Row.ID)
        //{

        //    rowNumber++;


        //}
        //else
        //{
        //    rowNumber = 1;
        //}


        //Row.RowNumber = rowNumber;

        //PrevID= Row.ID;
       


    }

}

Det er det jeg har PT.
Avatar billede Slettet bruger
14. februar 2013 - 13:41 #6
Det er int's på nær datoen - det er datetime
Avatar billede arne_v Ekspert
14. februar 2013 - 15:13 #7
Eksempel paa while og for loekke:

using System;
using System.Collections.Generic;

namespace E
{
    public class Raw
    {
        public int Id { get; set; }
        public DateTime Time { get; set; }
        public int SubId { get; set; }
    }
    public class Processed
    {
        public int Id { get; set; }
        public TimeSpan Time { get; set; }
        public int SubId { get; set; }
    }
    public class Program
    {
        public static List<Processed> RawToProcessed(List<Raw> raw)
        {
            List<Processed> res = new List<Processed>();
            int j  = 0;
            while(j < raw.Count)
            {
                j++;
                for(int i = 0; i < 3 - 1; i++)
                {
                    res.Add(new Processed { Id = raw[j].Id, Time = raw[j].Time - raw[j-1].Time, SubId = i + 1 });
                    j++;
                }
            }
            return res;
        }
        public static void Main(string[] args)
        {
            List<Raw> raw = new List<Raw>();
            raw.Add(new Raw { Id = 1, Time = DateTime.Now.AddSeconds(1), SubId = 1 });
            raw.Add(new Raw { Id = 1, Time = DateTime.Now.AddSeconds(2), SubId = 2 });
            raw.Add(new Raw { Id = 1, Time = DateTime.Now.AddSeconds(4), SubId = 3 });
            raw.Add(new Raw { Id = 2, Time = DateTime.Now.AddSeconds(8), SubId = 1 });
            raw.Add(new Raw { Id = 2, Time = DateTime.Now.AddSeconds(16), SubId = 2 });
            raw.Add(new Raw { Id = 2, Time = DateTime.Now.AddSeconds(32), SubId = 3 });
            foreach(Raw r in raw)
            {
                Console.WriteLine("{0} {1} {2}", r.Id, r.Time, r.SubId);
            }
            List<Processed> processed = RawToProcessed(raw);
            foreach(Processed p in processed)
            {
                Console.WriteLine("{0} {1} {2}", p.Id, p.Time, p.SubId);
            }
            Console.ReadKey();
        }
    }
}

men jeg er ikke helt klar over hvad du har og kan i din context.
Avatar billede Slettet bruger
14. februar 2013 - 15:50 #8
Det forstod jeg intet af- jeg ved ikke hvad du mener med kan og har?

:)

Jeg har det jeg postede ovenover :)
Avatar billede arne_v Ekspert
14. februar 2013 - 16:45 #9
Din kontekst er tilsyneladende:

Microsoft SQL Server Integration Services Script Component

og jeg ved ikke hvordan du har data og hvad du kan goere med dem.
Avatar billede Slettet bruger
15. februar 2013 - 09:21 #10
Dataen er i en tabel på en SQL server.

Jeg kan gøre stort set hvad jeg vil med dem...
Avatar billede Slettet bruger
15. februar 2013 - 14:19 #11
Sagen er løst:

Gjorde sådan her:


        if (OldId == Row.EID)
        {

            {
                Time = tempDate.Subtract(Row.CreateDate);
               

                     
            }
            tempDate = Row.CreateDate;
        }
        else
        {

            tempDate = Row.CreateDate;
            Time = TimeSpan.Zero;


        }

        OldId = Row.EID;

       
        Row.Time = (float)Time.TotalSeconds / 60;


    }
}

og efterfølgende en sort, med samme if sætning bare med rowNumber..

Tak for hjælpen - lige et svar begge for hjælp
Avatar billede arne_v Ekspert
15. februar 2013 - 20:43 #12
ok - selvom jeg ikke rigtigt foeler at jeg har bidraget med noget
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester