Dwa kryteria sortowania w jednej tabeli

Dwa kryteria sortowania w jednej tabeli
MP
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:43
0

Cześć,
Tworząc własny projekt w C# łącze się z baża danych MS SQL, pobieram dane, sortuję i wyświetlam na różne sposoby.
Wszystkie dane wyświetlam w dataGridView1:

Kopiuj
 public partial class Form5 : Form
    {
        SqlConnection con;
        public Form5()
        {
            InitializeComponent();
            con = new SqlConnection(" server=TMS; initial catalog=TMSCLIENT4; user = sa ; password = ptms ");
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
           try
            {
                con.Open();
                 SqlDataAdapter sqlData = new SqlDataAdapter
                ("SELECT DATEADD(DAY, DATEDIFF(DAY, 0, WorkDateTime), 0) as Dzień,  'DZIEŃ' AS Okres,SUM(Weight) AS Produkcja, AVG(Performance) AS Wydajność, COUNT(BeltMoveTime) AS 'Czas_ruchu_taśmy' FROM[TMSCLIENT4].[dbo].[vwConveyorScaleMinute] WHERE VehicleId = 2 AND WorkDateTime BETWEEN '2021-09-16 01:00:00.000'AND '2021-09-30 23:00:00.000' AND BeltMoveTime = 1 GROUP BY dateadd(DAY, datediff(DAY, 0, WorkDateTime), 0)ORDER BY dateadd(DAY, datediff(DAY, 0, WorkDateTime), 0)", con);
                DataTable dtbl = new DataTable();
                sqlData.Fill(dtbl);
                dataGridView1.DataSource = dtbl;
               con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
}
}

i wszytsko łądnie działa.
Prolbem pojawił się w chwili gdy chcę dodac jedną kolumne w której będą inne parametry sortowania. (dane będa te same lecz sortowane pod całkowicie innymi kryteriami )
Próbowałem dodać nowa kolumnę w dataGridView1 i tam zaimportowac od nowa dane z bazy posortowane według innych kryteriów, lecz nie wyszło mi to.

Dlatego pytam czy to wogólę dobra droga ? aby importować dane do data|GridView1 dwa razy czy jest na to inne rozwiązanie ?

UglyMan
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 lata
  • Postów:2206
0

A możesz napisać co masz w kolumnie a po czym chcesz sortować ?

MP
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:43
0

Dane w bazie są zbierane co 1 min. poniżej mamy juz tabelkę z posortowanymi danymi
screenshot-20211123113514.png
gdzie np.
Mamy "Czas_ruchu_taśmy" liczony tylko gdy "Wydajność " jest wieksza od 10 używając
COUNT(BeltMoveTime) AS 'Czas_ruchu_taśmy'
AND Performance >10

Teraz chcę stworzyć nową kolumne o nazwie "Czas_ponieżej_wydajności" w dataGridView1 i tam sortowac dane z bazy według kryteeriun np. Performance <10 i Performance >0. Oczywiście chcę dodać kilka column z różnymi Kryteriami sortowania, wszytsko opiera się na jednej tabeli i tych samych danych.

UglyMan
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 lata
  • Postów:2206
1

Nie do końca rozumiem, ale wydaje mi się ze chodzi o coś takiego

Kopiuj
sum(CASE
    WHEN Performance  < 10 THEN  BeltMoveTime
       ELSE 0
END) as Czas_ponieżej_wydajności;

Maszyna nie może mieć wydajności poniżej zera, bo by musiała produkty zażerać.

MP
@UglyMan Ty to jesteś genialny, myśle że to powinno wystarczyć
UglyMan
Ty to jesteś genialny Powiedz mi coś czego nie wiem :)
MP
Mam jeszcze jedno pytanie: gdyż wszystkie pomiary sa prowadzone zazwyczaj co minutę w Columnie "WorkDateTime", i jak zabezpieczyć sortowanie danych aby w przypadku jeśli pojawi sie pojedynczy pomiar w ciągu nocy np o godz 01:01:01(który trwa 1 min) a zmiana zaczyna się koło 6:00, Można wstawić tutaj jakigoś "ifa" aby brał pod uwagę pomiary tylko wtedy jeśli pomiar jest wykonywany co najmnie 5 minut ?
UglyMan
jeśli pomiar jest wykonywany co najmnie 5 minut Tego nie rozumiem. Ogólnie to nie wiem, w czym jest tu problem, że zmianą od 6 i jedną minutą o północy.
MP
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:43
0

Już tłumaczę:
Zazwyczaj mamy sytuację :
screenshot-20211124075038.png

mamy jasny sygnał ze maszyna pracuję, wskazuje to BeltMoveTime i wszystkie zapytania i wyliczenia ładnie działają.
Problem pojawia sie gdy mamy przypadek :

screenshot-20211124075306.png

Ta stacja miała miejsce w dzień wolny od pracy, i mamy informację, że w ciągu całego dnia przez 1 min było jakieś zakłócenie i w danych 1 na jednej pozycji.
w takiej sytuacji wszystkie zapytania pokażą w ten dzień 0, lecz chodzi mi o to by w ogóle nie zakwalifikowało tego dnia i automatycznie odrzuciło takie zakłócenia, dlatego wspomniałem o tym kryterium, jeśli nie mamy przynajmniej 5 jedynek pod rząd (czyli ciągłej pracy 5 min) nie bierzemy tego w ogóle pod uwagę i tym samym taki dzień nie będzie uwzględniany podczas sortowania.
Czy możliwe jest dodanie jakieś funkcji warunkowej aby sprawdzać takie rzeczy i eliminować takie zakłócenia?

Mam nadzieję, że już jasno wytłumaczyłem o co mi chodzi

UglyMan
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 lata
  • Postów:2206
1
Mlody_pb napisał(a):

Już tłumaczę:

Zazwyczaj mamy sytuację :
screenshot-20211124075038.png

mamy jasny sygnał ze maszyna pracuję, wskazuje to BeltMoveTime i wszystkie zapytania i wyliczenia ładnie działają.
Problem pojawia sie gdy mamy przypadek :

screenshot-20211124075306.png

Ta stacja miała miejsce w dzień wolny od pracy, i mamy informację, że w ciągu całego dnia przez 1 min było jakieś zakłócenie i w danych 1 na jednej pozycji.
w takiej sytuacji wszystkie zapytania pokażą w ten dzień 0, lecz chodzi mi o to by w ogóle nie zakwalifikowało tego dnia i automatycznie odrzuciło takie zakłócenia, dlatego wspomniałem o tym kryterium, jeśli nie mamy przynajmniej 5 jedynek pod rząd (czyli ciągłej pracy 5 min) nie bierzemy tego w ogóle pod uwagę i tym samym taki dzień nie będzie uwzględniany podczas sortowania.
Czy możliwe jest dodanie jakieś funkcji warunkowej aby sprawdzać takie rzeczy i eliminować takie zakłócenia?

Mam nadzieję, że już jasno wytłumaczyłem o co mi chodzi

Rozwiązanie tego problemu nie jest na jednego SQLa:

  1. Metody statystyczne - sprawdzasz że to była jedna (najważniejsze jest określenie warunków, przy jakich ignorujesz odczyty) i ignorujesz takie wpisy
  2. Stworzenie planu zmian o określenie, kiedy są pracujące, a kiedy nie i ignorowanie kiedy zmiany są niepracujące.
  3. Powiązanie danych z maszyny ze zleceniami produkcyjnymi (jak takie są) - ignorować dane z maszyny ja nie mam niej uruchomionego zlecenia.

Można też wykorzystać wszystkie 3 metody.

MP
Skłaniam się do 1 metody, czyli jak to ma być zrobione, aby później można to było załadować do dataGridView w c#? najpierw przesortować dane pod kontem tych zakłóceń a później dopiero sortować ostatecznie wyliczając parametry które nas interesują? czy wstępnie wyliczyć to co mamy a te wyjątki usuwać już w dataGridView? Pytam która droga będzie właściwa, ze względu na moje początki w tej dziedzinie (:
UglyMan
Ja bym zrobił jakiś proces, który by przechodził po danych sprawdzał warunki i oznaczał czy są poprawne, czy nie. Na froncie to bardzo opóźni pokazanie danych użytkownikowi co wpłynie na używalność systemu.
MP
@ UglyMan może masz pomysł jak by miało wyglądać ?
UglyMan
Ale że technicznie - czyli jak zrobić takiego taska, czy logicznie - czyli kiedy należy ignorować dane?
MP
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:43
0

Technicznie, gdyż już jakiś czas myślę nad tym i nic nie wychodzi. Próbowałem właśnie to zrobić już w programie w C# ale nie wyszło. Teraz właśnie podsunąłeś inny pomysł, lecz kompletnie nie wiem jak go ugryść.
Z założeniem że jeśli pojawi się czas pracy poniżej 5 min (ewenutalnie później do zmiany) to odrzucamy te dane i w późniejszym sortowaniu ich nie uwzględniamy., aby nie było sytuacja ja na obrazku:

screenshot-20211124134554.png

MP
@UglyMan może jakaś większa podpowiedż jak sobie z tym problememm poradzić ?
UglyMan
Najprościej to policzyć sumę godzinową i odwalić te gdzie np suma jest mniejsza niż 10. Tylko odwalisz tam, gdzie np maszyna zaczynała pracować lub kończyła a ten czas jest krótszy niż 10 minut. Druga opcja to posumować bloki pracy (trzeba użyć funkcji okienkowych) i odwalić takie bloki gdzie blok jest krótszy niż 5 minut. Może też tak być, że stop jest błedem - może wówczas jak np w całej godzinie jedna minuta jest stopem to tez należałoby ją zmienić na pracę. To jest rzeczywisty problem, czy to jakaś praca akademicka?
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)