Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menghitung semua baris dengan kolom tertentu dan mengelompokkan berdasarkan minggu

Permintaan Anda tidak deterministik sehingga tidak mengherankan Anda mendapatkan hasil yang tidak terduga. Maksud saya, Anda dapat menjalankan kueri ini pada data yang sama 5 kali dan mendapatkan 5 set hasil yang berbeda. Ini karena Anda memilih DATE(timestamp) tetapi mengelompokkan berdasarkan WEEK(DATE(startdate)) , oleh karena itu kueri mengembalikan waktu dari baris pertama yang dilewati per minggu tanggal mulai dalam APAPUN pesan.

Perhatikan 2 baris berikut (dengan stempel waktu dalam format tanggal untuk kemudahan membaca):

TimeStamp       StartDate
20120601        20120601
20120701        20120601

Kueri Anda dikelompokkan berdasarkan WEEK(StartDate) yaitu 23, karena kedua baris mengevaluasi ke nilai yang sama, Anda akan mengharapkan hasil Anda memiliki 1 baris dengan hitungan 2.

NAMUN DATE(Timestamp) Juga ada dalam daftar pilih dan karena tidak ada ORDER BY pernyataan kueri tidak tahu Stempel Waktu mana yang akan dikembalikan '20120601' atau '20120701'. Jadi, bahkan pada kumpulan hasil kecil ini, Anda memiliki peluang 50:50 untuk mendapatkan:

TimeStamp       COUNT
20120601        2

dan peluang 50:50 untuk mendapatkan

TimeStamp       COUNT
20120701        2

Jika Anda menambahkan lebih banyak data ke kumpulan data seperti itu:

TimeStamp       StartDate
20120601        20120601
20120701        20120601
20120701        20120701

Anda bisa mendapatkan

TimeStamp       COUNT
20120601        2
20120701        1

atau

TimeStamp       COUNT
20120701        2
20120701        1

Anda dapat melihat bagaimana dengan 37.000.000 baris Anda akan segera mendapatkan hasil yang tidak Anda harapkan dan tidak dapat diprediksi!

EDIT

Karena sepertinya Anda mencoba untuk mendapatkan awal minggu dalam hasil Anda, sementara grup demi minggu Anda dapat menggunakan yang berikut ini untuk memulai minggu (mengganti CURRENT_TIMESTAMP dengan kolom mana pun yang Anda inginkan):

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

Anda kemudian dapat mengelompokkan menurut tanggal ini juga untuk mendapatkan hasil mingguan dan menghindari kesulitan memiliki hal-hal dalam daftar pilihan Anda yang tidak termasuk dalam grup Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Kesalahan entri duplikat saat mencoba menambahkan kolom baru

  2. Menanyakan jumlah item dari pohon

  3. Tidak dapat terhubung ke server Mysql; Tidak dapat membuat/menulis file pid

  4. Memperbarui kolom pesanan MySQL?

  5. Saya memiliki beberapa kueri yang ingin menggabungkan semua hasil kueri ke dalam tabel yang sama