2016-06-13 39 views
3

我有一個表,這個DDL:MariaDB的按日期排序和極限偏差和缺失的結果

CREATE TABLE BAR_INGRESO_TEST (
    ING_ID BIGINT(20) PRIMARY KEY NOT NULL AUTO_INCREMENT, 
    ING_DESCRIPCION VARCHAR(255), 
    ING_FECHA DATE, 
    ING_IMPORTE DECIMAL(19,2), 
    ING_SOCIO_ID BIGINT(20) 
); 

而這個樣本數據:

INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 1', '2015-10-22', 73.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 2', '2015-10-29', 68.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 3', '2015-11-26', 190.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 4', '2015-12-09', 175.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 5', '2015-12-16', 200.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 6', '2015-12-18', 395.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 7', '2015-12-18', 161.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 8', '2015-12-30', 246.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 9', '2016-01-03', 145.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 10', '2015-12-21', 46.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 11', '2015-12-21', 73.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 12', '2016-02-03', 69.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 13', '2016-02-03', 37.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 14', '2016-02-03', 25.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 15', '2016-03-07', 50.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 16', '2016-04-18', 92.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 17', '2016-04-18', 74.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 18', '2016-06-03', 210.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 19', '2015-07-06', 75.00, 15); 
INSERT INTO BAR_INGRESO_TEST (ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID) VALUES ('Description 20', '2015-07-06', 25.00, 15); 

這個查詢給這些結果:

select * from BAR_INGRESO_TEST order by ING_FECHA desc; 

+--------+-----------------+------------+-------------+--------------+ 
| ING_ID | ING_DESCRIPCION | ING_FECHA | ING_IMPORTE | ING_SOCIO_ID | 
+--------+-----------------+------------+-------------+--------------+ 
|  18 | Description 18 | 2016-06-03 |  210.00 |   15 | 
|  17 | Description 17 | 2016-04-18 |  74.00 |   15 | 
|  16 | Description 16 | 2016-04-18 |  92.00 |   15 | 
|  15 | Description 15 | 2016-03-07 |  50.00 |   15 | 
|  14 | Description 14 | 2016-02-03 |  25.00 |   15 | 
|  13 | Description 13 | 2016-02-03 |  37.00 |   15 | 
|  12 | Description 12 | 2016-02-03 |  69.00 |   15 | 
|  9 | Description 9 | 2016-01-03 |  145.00 |   15 | 
|  8 | Description 8 | 2015-12-30 |  246.00 |   15 | 
|  10 | Description 10 | 2015-12-21 |  46.00 |   15 | 
|  11 | Description 11 | 2015-12-21 |  73.00 |   15 | 
|  7 | Description 7 | 2015-12-18 |  161.00 |   15 | 
|  6 | Description 6 | 2015-12-18 |  395.00 |   15 | 
|  5 | Description 5 | 2015-12-16 |  200.00 |   15 | 
|  4 | Description 4 | 2015-12-09 |  175.00 |   15 | 
|  3 | Description 3 | 2015-11-26 |  190.00 |   15 | 
|  2 | Description 2 | 2015-10-29 |  68.00 |   15 | 
|  1 | Description 1 | 2015-10-22 |  73.00 |   15 | 
|  19 | Description 19 | 2015-07-06 |  75.00 |   15 | 
|  20 | Description 20 | 2015-07-06 |  25.00 |   15 | 
+--------+-----------------+------------+-------------+--------------+ 

直到這裏一切都好。問題是這兩個查詢:

select * from BAR_INGRESO_TEST order by ING_FECHA desc limit 10; 

select * from BAR_INGRESO_TEST order by ING_FECHA desc limit 10, 10; 

,我需要分頁這些結果,但這個條目總是丟失:

|  10 | Description 10 | 2015-12-21 |  46.00 |   15 | 

這有什麼錯我的表或查詢?

回答

2

的問題與您查詢的是,你的表包含在地方10, 11以下記錄:

ING_ID, ING_DESCRIPCION, ING_FECHA, ING_IMPORTE, ING_SOCIO_ID 
-------------------------------------------------------------- 
10,  Description 10, 2015-12-21, 46.00,  15 
11,  Description 11, 2015-12-21, 73.00,  15 

碰巧有相同ING_FECHA值。兩個查詢都選擇相同的記錄,即具有ING_ID=11的記錄。

爲了解決你所需要的ORDER BY子句中指定的第二場問題:

select * 
from BAR_INGRESO_TEST 
order by ING_FECHA desc, ING_ID limit 10; 
+0

謝謝,我惹毛了:P反正這是很奇怪的。 – Monkiki

+0

您需要'INDEX(ING_FECHA,ING_ID)'。另外,通過添加'DESC':'ING_FECHA desc,ING_ID DESC limit 10;'這樣可以更高效'這是因爲當ORDER BY具有ASC的混合時,MySQL/MariaDB不能使用索引'和'DESC'。 –