Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] wybieranie najnowszych i najstarszych danych z przedziału czasu
grzemach
post
Post #1





Grupa: Zarejestrowani
Postów: 121
Pomógł: 4
Dołączył: 9.06.2007
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Witam,
Tworząc aplikację napotkałem na pewien problem problem, otóż aplikacja ma pobierać podsumowanie w pewnym okresie (ustawionym przez użytkownika).
SQL działą poprawnie:
  1. $sql = 'select
  2. (select `login` from '.TABLE_USERS.' where '.TABLE_RESULTS.'.`userId`='.TABLE_USERS.'.`id`) as login,
  3.  
  4. sum(`Fills`), sum(`Qty`),
  5. `Start_Cash`,
  6.  
  7. sum(`Gross_Realized`), sum(`ECN_LSE_Exch`),
  8. sum(`Net_Realized`),
  9. (`End_Balance`),
  10. sum(`Clear`),sum(`NSCC_LSE_Exe`),sum(`SEC_NFA_LSE_PMT`),
  11. sum(`NYSE_TAF`),sum(`NSDQ_LSE_Liq`),
  12.  
  13.  
  14. (select `name` from '.TABLE_USERS.' where '.TABLE_RESULTS.'.`userId`='.TABLE_USERS.'.`id`),
  15. (select `surname` from '.TABLE_USERS.' where '.TABLE_RESULTS.'.`userId`='.TABLE_USERS.'.`id`)
  16.  
  17. from '.TABLE_RESULTS.' where (';
  18. foreach ($usersArray as $userId){
  19. $sql .= ' `userId`=\''.$userId.'\' or';
  20. }
  21. $sql = substr($sql,0,strlen($sql)-2).')'.$sqlInside.' group by `userId` order by login ASC';


Jest jednak małe ale...
Wartość `Start_Cash` i `End_Balance`, powinny być odpowiednio pierwsza z danego okresu, oraz ostatnia z danego okresu... domyślam się, że oba rozwiązania będą prawie identyczne... jednak mi brakuje pomysłu jak można by to rozwiązać... jestem przekonany, że istnieje coś jak max() min(), jednak dla pierwszego i ostatniego elelementy...

Czyli trzeba by dodać
  1. SELECT `start_cash` FROM '.TABLE_RESULTS.'.`userId`='.TABLE_RESULTS.'.`userId` ORDER BY `dateOfResult` ASC LIMIT 1
tylko jak to zrobić...

Ten post edytował grzemach 16.10.2009, 10:13:52


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Hmm, chyba możesz skorzystać z czegoś w stylu:
  1. @maxId := (SELECT ID FROM tabela ORDER BY `date` ASC LIMIT 1);
  2. @minId := (SELECT ID FROM tabela ORDER BY `date` DESC LIMIT 1);
  3. SELECT * FROM WHERE ID=@maxId OR ID=@minId

?

Pisane z palca, mogłem składnię pomylić. winksmiley.jpg


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
grzemach
post
Post #3





Grupa: Zarejestrowani
Postów: 121
Pomógł: 4
Dołączył: 9.06.2007
Skąd: Kielce

Ostrzeżenie: (0%)
-----


ogólnie zdaję sobie z tego sprawę, jednak miałem nadzieję, że da się to jakoś inaczej załatwić, bo w ten sposób będę miał naprawdę masę zapytań...
a siedzę już nad tym prawie 5 dni... aby zrobić to najprościej...


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 10:00