Mysql
 sql >> база данни >  >> RDS >> Mysql

Преброяване на всички редове с конкретни колони и групиране по седмица

Вашата заявка е недетерминирана, така че не е изненадващо, че получавате неочаквани резултати. С това имам предвид, че бихте могли да стартирате тази заявка върху едни и същи данни 5 пъти и да получите 5 различни набора от резултати. Това се дължи на факта, че избирате DATE(timestamp) но групиране по WEEK(DATE(startdate)) , следователно заявката връща часа на първия ред, който среща, за седмица с начална дата във ВСЯКАКВА поръчка.

Помислете за следните 2 реда (с времеви печат във формат на дата за по-лесно четене):

TimeStamp       StartDate
20120601        20120601
20120701        20120601

Заявката ви се групира по WEEK(StartDate) което е 23, тъй като и двата реда се оценяват на една и съща стойност, бихте очаквали резултатите ви да имат 1 ред с брой 2.

ОБАЧЕ DATE(Timestamp) Също така е в списъка за избор и тъй като няма ORDER BY израз заявката няма представа кое клеймо за време да върне '20120601' или '20120701'. Така че дори при този малък набор от резултати имате шанс 50:50 да получите:

TimeStamp       COUNT
20120601        2

и шанс 50:50 за получаване

TimeStamp       COUNT
20120701        2

Ако добавите още данни към набора от данни така:

TimeStamp       StartDate
20120601        20120601
20120701        20120601
20120701        20120701

Можете да получите

TimeStamp       COUNT
20120601        2
20120701        1

или

TimeStamp       COUNT
20120701        2
20120701        1

Можете да видите как с 37 000 000 реда скоро ще получите резултати, които не очаквате и не можете да предвидите!

РЕДАКТИРАНЕ

Тъй като изглежда, че се опитвате да получите началото на седмицата в резултатите си, докато група по седмица можете да използвате следното, за да получите началото на седмицата (заменяйки CURRENT_TIMESTAMP с колоната, която искате):

SELECT  DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 1 - DAYOFWEEK(CURRENT_TIMESTAMP) DAY) AS WeekStart

След това можете да групирате и по тази дата, за да получавате седмични резултати и да избегнете проблемите да имате неща в избрания списък, които не са във вашата група.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изчислете точността на набор от данни

  2. MySQL на Azure Performance Benchmark – ScaleGrid срещу Azure Database

  3. Много постоянен /opt/lampp/bin/mysql.server:264:kill:Няма такъв процес. Xampp/ubuntu 16.04

  4. Няма резултати от заявка за модел [App\Products] Laravel

  5. mysql(i)_real_escape_string, безопасно ли е да се разчита?