2010-04-06 5 views
1

나는 Createdon 및 Lastmodifiedon 필드가있는 테이블을 사용하고 있습니다. 먼저 createdon을 기반으로 새로 추가 된 레코드를 표시 한 다음 mysql을 사용하여 lastmodifiedon 레코드를 표시해야합니다. "ORDER BY Createdon, Lastmodifiedon desc"쿼리 끝에 추가 시도했지만 첫 번째 열에 따라 정렬 만 발생합니다. 누구나이 문제에 도움을주십시오.두 개의 열을 사용하여 MySQL의 순서

감사합니다.

+0

가능한 복제본 http://stackoverflow.com/questions/514943/php-mysql-order-by-two-columns, http://stackoverflow.com/questions/2051162/sql-multiple-column-ordering. 또한 http://stackoverflow.com/questions/2099923/how-do-i-order-by-multiple-columns-in-a-select-query – outis

+0

을 참조하십시오. 데이터의 몇 가지 예와 원하는 방식을 제공 할 수 있습니까? 어떻게 나타나고 실제로 나타나고있는가? – Amadiere

답변

0

이 데이터는 어떤 점에서 이상합니까? 예 : 그것이 이상하게 행동하는 방법과 당신이보기를 기대하는 것과 실제로 얻는 것을 보여주는 몇 가지 예를 제공 할 수 있습니까?

사용중인 ORDER BY은 일반적으로 사용되는 것으로 기본적으로 목록에서 첫 번째로 주문한다는 전제하에 작동하며 두 개가 동일하면 두 번째로 주문합니다. 정상적인 좋은 예는 Firstname & 성입니다. 성으로 주문하면 잠재적으로 2 명의 스미스가 생깁니다. 그 시점에서 Firstname으로 주문하면 Alex가 Sheridan 앞에 나타납니다.

예를 들어 CreatedOn으로 주문하고 ModifiedOn으로 주문하려고합니다. 생성 된 날짜순으로 정렬되며 두 날짜가 같은 날짜/시간 (또는 날짜)에 생성 된 경우 수정 된 날짜순으로 정렬됩니다.

해결책? 음, 데이터를 멋지게 유지하면 ModifiedOn이 비어있는 경우 정렬을 뒤집어 다음과 같이 할 수 있습니다. ORDER BY ModifiedOn, CreatedOn. 이것은 하나의 피클을 남겨 둡니다 : ModifiedOn 날짜는 빈 날짜가 오래된 날짜 (1/1/1970과 같은 것)로 간주되므로 가장 오래된 날짜부터 시작해야합니다. 이것을 제대로 뒤집어 쓰는 것은 단순한 순서 이상이라고 생각합니다.

ORDER BY Createdon,Lastmodifiedon desc 

당신에게 : 더 나은 해답을 제시하기 위해 아마도 새로운 기록이 마지막에 나타나도록 쿼리가 올바른 :

3

당신은 오름차순으로 Createdon 정렬되어 있는지 확인하기 위해 데이터의 비트를 필요로하므로 것 필요 :

ORDER BY Createdon DESC, Lastmodifiedon DESC 
1

이것은 날짜 열을 기준으로 정렬 할 때 일반적으로 발생하는 문제입니다. 날짜 열에는 일반적으로 정확한 시간 (밀리 초)이 포함되기 때문에 첫 번째 날짜에 두 개의 동일한 항목을 가져올 확률이 대부분의 응용 프로그램에서 너무 낮기 때문에 정렬 순서의 이후에있는 항목은 실제로 무시됩니다 효과.

당신이해야 할 일은 당신이 만족하는 해결책 (예 : 1 일)으로 자른 후 으로 주문하면입니다.이 시점에서 ORDERing에 동일한 항목이 생기고 두 번째 조항이 적용됩니다.

내가 여기에 대한 정확한 구문을 알고 충분히 MySQL은,하지만 SQL Server에서 모르는

내가 아는 가장 간단한 방법은 당신에게 일일의 해상도를 줄 것이다

SELECT * FROM Table 
ORDER BY FLOOR(CAST(CreatedOn AS Float)), LastModifiedOn DESC 

것 - 이유는 SQL Server 날짜가 부동 소수점으로 변환 될 때 날짜를 나타내는 정수 부분을 제공하기 때문입니다. 다른 해상도가 필요한 경우 ORDER BY 문에서 DATEADD 및 DATEDIFF를 사용하거나 ASCII 정렬 가능 형식 (예 : YYYYMMDD hhmmss)의 문자열로 날짜를 변환하고 적절한 위치에서자를 수 있습니다.그리드에 표시 할 때

ORDER BY 
    -- 1 displays first the newly created, 2 displays all modified in last order 
    CASE WHEN LastModifiedOn IS NOT NULL THEN 2 ELSE 1 END, 

    COALESCE(LastModifiedOn, CreatedON) DESC 
0

당신의 LastModifiedOn가 레코드를 새로 생성 NULL의 초기 값이있는 경우,이 작업을 수행 . 답장을 보내 주셔서 감사합니다.

0

나는 새 레코드를 추가 할 때 createdlastmodified 날짜 같은 값을 사용 order by lastmodified desc을 사용 :

관련 문제