2012-05-25 40 views
6

Đề cập đến câu hỏi trước đây của tôi về concat nhóm Mysql again, group by and display rest of rowsChọn hàng đầu tiên và cuối cùng từ group_concat khi nhóm ngày sắp xếp được

tôi cần để có được ngày đầu tiên và cuối cùng từ truy vấn đó

ví dụ

row 3 from 8,9,10 to first collumn 8, last collumn 10 
row 5 from 21,22,23,24,28,29,30 to first collumn 21, last collumn 30 
row 6 from 17,21,22,23,24,25 to first collumn 17 last collumn 25 

SUBSTR(GROUP_CONCAT(DAY),-1) as fl 

NHƯNG nó cho tôi lần cuối cùng, và có một vài hàng có 1 hoặc 2 ký tự, ví dụ

1,2,3,22 
1,3,6,3 

Trong ví dụ đầu tiên, nó cho tôi thấy 2, không phải 22:/

Trả lời

2

Đừng lãng phí thời gian của bạn để phân tích cú pháp đầu tiên và cuối cùng của số GROUP_CONCAT(). Thay vào đó, chỉ cần dán MIN()MAX() cùng với CONCAT().

SELECT 
    user, 
    CONCAT(MIN(DAY)), ',', MAX(DAY)) AS f1 
FROM yourtable 
GROUP BY user 
+0

thực hiện thao tác tối thiểu và hoạt động tối đa như "đầu tiên" và "cuối cùng" hay chúng hoạt động giống như tên của chúng nghe như thế nào? – Jus12

+0

@ Jus12 Chúng là [tổng hợp 'MIN()/MAX()'] (http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html) để chúng giống như chúng âm thanh, giá trị nhỏ nhất và lớn nhất cho mỗi nhóm 'người dùng'. –

+0

Tôi thích điều này, nhưng giải pháp là rất cụ thể nếu dữ liệu được sắp xếp theo ngày và câu hỏi có vẻ chung chung hơn "chọn hàng đầu tiên và cuối cùng từ nhóm concat". Lý tưởng nhất nên có một cách để chọn các yếu tố đầu tiên và cuối cùng mà không cần phân loại. Có cái gì như thế không? – Jus12

6

Một tùy chọn khác (ngoài giải pháp của Michael) là sử dụng SUBSTRING_INDEX:

SUBSTRING_INDEX(str,delim,count) 

với

count = 1 

bạn nhận được trong ngày đầu tiên,

với

count=-1 

bạn có được hình ảnh cuối cùng

+0

"Cảm ơn bạn Mario" ;-) – breq

+0

quan tâm để giải thích cho tôi? tôi không hiểu – Th0rndike

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