2013-09-03 24 views
5

Tôi có một bảng không may, tôi không thể thay đổi theo bất kỳ cách nào và phải làm việc với những gì tôi có.Chọn số lớn nhất từ ​​Bảng MYSQL có thêm Tiền tố

Bảng mysql có trường được gắn nhãn "customer_id". Nó có 2 chữ cái bắt đầu bằng số có 4 giá trị.

EX: BI8392

HE8492

WO1293

Làm thế nào tôi có thể chọn các giá trị số lớn nhất với một tiền tố nhất định? Ví dụ, giả sử rằng tôi muốn chọn số lớn nhất có tiền tố là HE. Làm thế nào tôi có thể chọn giá trị đó?

Mọi trợ giúp đều được đánh giá cao. Tôi đã bị mắc kẹt một lúc rồi.

+0

Có, chúng được để đệm. – user1011713

Trả lời

4

Vì tất cả các giá trị trái đệm bạn có thể làm

SELECT RIGHT(MAX(customer_id), 4) max_val 
    FROM table1 
WHERE customer_id LIKE 'HE%' 

Hãy chắc chắn rằng bạn có một chỉ mục trên customer_id mà có thể bạn dựa trên tên cột. LIKE rất có thể sẽ sử dụng nó.

Đây là SQLFiddle bản demo

+0

Điều này đã làm điều đó. Cảm ơn! – user1011713

+0

@ user1011713 Bạn đang khá hoan nghênh. Chúc may mắn :) – peterm

1

SỬ DỤNG:

SELECT MAX(RIGHT(customer_id,4)) AS max fROM table_name 
    WHERE LEFT(customer_id,2)='HE'; 
+0

Quên mệnh đề where cho 'HE'. – wiscWeb

+0

Có, điều này không hoạt động. – user1011713

+0

Cảm ơn, nó đã được sửa chữa. – Salim

0

Nếu tiền tố của bạn có cùng độ dài, bạn có thể làm:

Ex.

SELECT MID(column_name,start[,length]) FROM table_name; 

Đầy ra:

SELECT MID(customer_id,2,4) FROM table_name; 
2
SELECT LEFT(customer_id,2) AS PREFIX, 
     MAX(RIGHT(customer_id,4)) AS MAX 
FROM table1 
GROUP BY LEFT(customer_id,2) 

SQL Fiddle

MySQL 5.5.32 Schema Cài đặt:

CREATE TABLE Table1 
    (`customer_id` varchar(6)) 
; 

INSERT INTO Table1 
    (`customer_id`) 
VALUES 
    ('DD1234'), 
    ('DD1222'), 
    ('EE2345'), 
    ('EE6789') 
; 

Query 1:

SELECT LEFT(customer_id,2) AS PREFIX, 
     MAX(RIGHT(customer_id,4)) AS MAX 
FROM table1 
GROUP BY LEFT(customer_id,2) 

Results:

| PREFIX | MAX | 
|--------|------| 
|  DD | 1234 | 
|  EE | 6789 | 

EDIT:

SELECT MAX(RIGHT(customer_id,4)) AS MAX 
FROM table1 
GROUP BY LEFT(customer_id,2) 
WHERE LEFT(customer_id,2) = 'HE' 
+0

Bạn có chắc chắn điều này sẽ sắp xếp một cách chính xác về số lượng không? –

+0

@inflagranti ý của bạn là gì? –

+0

@inflagranti. OP đang tìm cách lấy giá trị MAX, không liệt kê các giá trị số ... Ngoài ra nếu bạn đang tìm kiếm một thay đổi tối đa cụ thể, 'GROUP BY' thành mệnh đề' WHERE' phù hợp với nhu cầu của bạn. – wiscWeb

0

dữ liệu mẫu:

mysql> SELECT * FROM Document; 
+--------+-------------+ 
| DataID | Description | 
+--------+-------------+ 
|  1 | BI8392  | 
|  2 | HE8492  | 
|  3 | HE8493  | 
|  4 | HE8490  | 
+--------+-------------+ 

Query:

SELECT MAX(SUBSTR(Description,3)) FROM Document 
WHERE SUBSTR(Description,1,2) = 'HE'; 

Returns:

+----------------------------+ 
| MAX(SUBSTR(Description,3)) | 
+----------------------------+ 
| 8493      | 
+----------------------------+ 
0

Trong SQL Server, bạn có thể làm một chuỗi con và sau đó ORDER BY, bạn sẽ cần phải cast nó vào một số thập phân (nếu không nó sẽ ra lệnh bởi Varchar, Ví dụ 999 sẽ lớn hơn 1000)

SELECT SUBSTRING(MyColumn,3, LEN(MyColumn) - 2) 
    FROM dbo.MyTable 
    ORDER BY CAST(SUBSTRING(MyColumn,3, LEN(MyColumn) - 2) as decimal) DESC; 

Số 3 ở trên là nếu Tiền tố dài 2 ký tự. Do đó, số 2 là tìm độ dài của chuỗi không có Tiền tố.

Các vấn đề liên quan