좋아요. 그래서 date_created, last_login, last_updated 등과 같은 것들을위한 datetime 컬럼이 여러 개 있습니다. 가장 최근의 datetime을 보여주는 하나의 컬럼으로 병합하고 싶습니다. active_users를보다 쉽게 추적 할 수 있습니다.MySQL은 여러 개의 날짜 열을 하나로 병합합니다.
나는 CONCAT 명령을 사용하기위한 몇 가지 제안을 찾았지만 모든 결과를 함께 묶는 것처럼 보입니다.
좋아요. 그래서 date_created, last_login, last_updated 등과 같은 것들을위한 datetime 컬럼이 여러 개 있습니다. 가장 최근의 datetime을 보여주는 하나의 컬럼으로 병합하고 싶습니다. active_users를보다 쉽게 추적 할 수 있습니다.MySQL은 여러 개의 날짜 열을 하나로 병합합니다.
나는 CONCAT 명령을 사용하기위한 몇 가지 제안을 찾았지만 모든 결과를 함께 묶는 것처럼 보입니다.
이 시도 :
SELECT username,
GREATEST(date_created, last_login, last_updated) last_activity
FROM your_table
ORDER BY last_activity DESC
편집 :
SELECT username,
GREATEST(
IFNULL(date_created, 0),
IFNULL(last_login, 0),
IFNULL(last_updated, 0)
last_activity
FROM your_table
ORDER BY last_activity DESC
는 다시 편집 : 당신의 DB 사본 (27.451 기록을 가진) 내가 사용에
:
SELECT id,
GREATEST(
IFNULL(current_login_datetime, 0),
IFNULL(created_datetime, 0),
IFNULL(updated_datetime, 0))
last_activity
FROM users
ORDER BY last_activity DESC
exaclty 획득 27.451 기록 !!
는 증명이 쿼리를 실행하려면 :
SELECT COUNT(*) FROM
(SELECT id,
GREATEST(
IFNULL(current_login_datetime, 0),
IFNULL(created_datetime, 0),
IFNULL(updated_datetime, 0))
last_activity
FROM users
ORDER BY last_activity DESC) der
을 돌려 그 숫자가
SELECT COUNT(*) FROM users
귀하의 문제가 전체의 반품 보여 주었다 기록에 한계에서 파생 될 수있는 쿼리와 동일합니다 확인하십시오.
예를 들어 Navicat light를 사용하면 1000 개의 레코드를 가질 수 있습니다 (단, 총 27.451 개를 읽을 수 있습니다).
값이 null 일 수 있고 처음이 아닌 null
값을 선택하려면 COALESCE를 사용하십시오. GREATEST
및 LEAST
는 옵션입니다
SELECT
username
,COALESCE(last_updated,last_login,date_created) AS not_null
,GREATEST(date_created, last_login, last_updated) AS latest
,LEAST(date_created, last_login, last_updated) AS first
FROM table1
ORDER BY last_activity DESC
더 많은 제어를 원하는 경우 문 때, 당신은 CASE를 사용할 수 있습니다
SELECT
username
, CASE WHEN date_created > '2011-01-31' THEN date_created
WHEN last_login > '2011-01-31' THEN last_login
ELSE last_updated END as its_complicated
.....
당신이 최신 원한다면 당신이 null
값이 주위에 떠있는이 쿼리를 사용 :
SELECT
username
,GREATEST(IFNULL(date_created,0), IFNULL(last_login,0), IFNULL(last_updated,0)) AS latest
FROM table1
ORDER BY last_activity DESC
여기 내가 http://imageshack.us/f/851/screenshot20110926at424.png/와 함께 일하고의 스크린 샷입니다. COALESCE 연산자는 약간 개선되었지만 not_null 열에는 데이터가 있습니다 모든 행에 최신 날짜가 아닌 날짜가 있습니다. –
@ Ryan Grush : IFNULL을 사용하면이 문제를 해결해야합니다 ... – Marco
이것은 처음에는 작동하는 것으로 보였지만, 행의 1/10 정도만 값을 찾았습니다. 내가 '가장 컸다'를 '가장'로 바꿨을 때 행의 1/5이 같았습니다. 문제 진단을 위해 노력하고 있지만 운이별로 없습니다. –
몇 개의 열을 삭제하면 데이터가있는 행의 수가 증가합니다. 어쩌면 어떤 형태의 OR 연산자를 포함 할 수 있습니까? –
@ Ryan Grush :이 동작에 대해 들어 본 적이 없습니다. ( – Marco