2010-05-13 6 views
0

첫 번째로 큰 텍스트를 여기에 올린 것에 대해 사과드립니다.Java에서 SQL 쿼리 결과 정렬

다음은 Java에서 SQL 쿼리를 실행 한 결과이지만 타임 스탬프를 사용하여 간략하게 설명합니다.

예 : 아래의 첫 줄 텍스트의 타임 스탬프는 040501 (HH : mm : ss)입니다 (모든 데이터에 타임 스탬프가 포함 된 것과 같습니다) (정렬은 타임 스탬프 매개 변수를 사용하여 수행해야합니다) (아래의 각 줄은 데이터베이스의 한 줄임)

나는 3 개의 쿼리를 하나씩 실행하고있다. 나는 첫 번째 쿼리를 실행 한 후 텍스트 파일에 쓰고 두 번째 쿼리를 실행하여 같은 텍스트 파일에 쓰고있다. 마찬가지로 나는하고있다. 이 경우 그것을 어떻게 분류 할 것인가.

12010051104050131331GZM4   7000000   1 FCFR 

120100511040501912828MP2  11590000   0 NOTY 

120100511040501312938VF7   366140 .96808795 FGPC 

120100511040501912828KA7   6580000   0 NOTY 

120100511040501912828JH4   490000   0 NOTY 

120100511160528912810PV4  83227500  1.03581 TRIB 

120100511160538912795W31    0   1 BILL 

120100511160540912828MP2  455784400   0 NOTY 

120100511160545912795W31    0   1 BILL 

    220100511 040501   2101000 

    220100511 040501  51037707 

    220100511 040502   700149 

    220100511 040502   4289000 

    220100511 060514  71616600 

    220100511 060514  722453500 

내가 기대하는 결과가 ...

12010051104050131331GZM4   7000000   1 FCFR 

120100511040501912828MP2  11590000   0 NOTY 

120100511040501312938VF7   366140 .96808795 FGPC 

120100511040501912828MP2  11590000   0 NOTY 

120100511040501912828JH4   490000   0 NOTY 

    20100511040501   2101000 

    20100511040501  51037707 

    20100511040502   4289000 

    20100511040502   700149 

    20100511060514  722453500 

    20100511060514  71616600 

    20100511160528912810PV4  83227500  1.03581 TRIB 

    20100511160538912795W31    0   1 BILL 

    20100511160540912828MP2  455784400   0 NOTY 

    20100511160545912795W31    0   1 BILL 

사람을 저를 도와주세요. 나는이 아주 오랫동안 싸우고있다. 미리 도움을 주셔서 감사합니다.

답변

4

이상적으로 테이블에는 TIMESTAMP 열이 있으며이 열은SQL 쿼리에서 사용할 수 있습니다. 자바에서 정렬하는 것보다 훨씬 낫다.

테이블의 구조가 무엇인지, 열이 무엇인지 등은 분명하지 않습니다. 올바르게 정규화되지 않은 경우, 유지하는 대신 가장 먼저 취해야 할 조치가 있습니다. 그것이 엉망이고 쿼리가 비참하게 만듭니다.

+0

자바에서 하나씩 3 개의 쿼리를 실행하고 동일한 텍스트 파일에 쓰고 있습니다. 일단 내가 첫 번째 쿼리를 실행하면 텍스트 파일에 쓰고 두 번째 쿼리를 실행하여 같은 텍스트 파일에 쓰는 중 .. 마찬가지로 내가하고있다. 그런 경우 어떻게 처리해야합니까? – Manu

+0

@Manu : 이미 3 가지 큰 파일이 있고 몇 가지 조건으로 정렬되어 있고 병합하려는 경우 디스크 내 병합 정렬 알고리즘이 합리적 일 것입니다. 나는 이것이 처음부터 필요하다는 것을 매우 의심 스럽다. 그리고 이것은이 3 가지 질의가 무엇이며, 왜 결과를 텍스트 파일에 버리는 지에 달려있다. – polygenelubricants

+0

테이블에 단일 열만 있습니다. 각 행의 데이터는 내 게시물에 언급 된 내용과 동일합니다. 타임 스탬프는 mytable에서 별도의 열이 아닙니다. 아래 표는 모든 정보가 포함 된 표의 단일 열에있는 데이터입니다. 귀하의 refernce 내가 여기 내 첫 번째 행을 가하고 있습니다. 아래의 타임 스탬프는 - 040501입니다. 12010051104050131331GZM4 7000000 1 FCFR – Manu

0

가장 좋은 옵션은 SQL 쿼리에서 ORDER BY를 사용하는 것입니다. 결과 세트의 한 요소에 즉시 액세스하기 때문입니다. 따라서, 모든 요소를 ​​가져 와서 어떤 작업을 수행하지 않고도 텍스트 파일에 쓸 수 있습니다.

0

그래서 데이터는 타임 스탬프와 함께 데이터가 포함 된 문자열을 포함하는 단일 열입니까?

너비가 고정되어 있습니까? 나는 예 : 타임 스탬프가 항상 10 번째 문자에서 시작하여 15 번째 위치에서 종료합니까?

이것은

그런 경우 가정하면, 당신은 작은 래퍼 클래스를 작성하고 쿼리의 결과 집합에서 해당 클래스의 객체를 만들 수 있습니다 .. 일부 레거시 메인 프레임 애플리케이션에서 출력, 그들은 일반적으로 폭 형식을 해결 한 것 같습니다 . 랩퍼 클래스도 비교 가능을 구현해야합니다 (추출 된 시간 소인에 따라 compare 메소드를 구현할 경우).

그러면 모든 객체를 List와 같은 Java 컬렉션에 넣고 collection.sort()를 수행하면됩니다.

0

SQL 또는 Java로 정렬하든 관계없이 먼저 시간 소인을 확실하게 식별하고 추출 할 수 있어야합니다. 데이터 행을 표시 한 형식은 고정 길이 레코드로 취급 할 수 있으므로 한 번에 레코드를 읽을 수 있으므로 Comparable 인터페이스를 구현할 수있는 클래스에 하위 문자열을 사용할 수 있습니다. 타임 스탬프 텍스트를 잘라내어 해당 텍스트에서 실제 날짜 또는 타임 스탬프를 만들고 비교하십시오. 그런 다음 표준 라이브러리를 사용하여 컬렉션 또는 배열의 행을 정렬 할 수 있습니다. 개인적으로, 나는 여전히 유사한 데이터베이스를 통해 모든 데이터를 가져 왔고 상당히 정교한 DB를 사용하여 3 개의 쿼리를 결합하여 단일 결과를 만들 수 있다고 가정하고 유사한 메커니즘을 통해 SQL에서 정렬을 수행합니다. 시간 소인에 대한 계산 필드, 그런 다음 계산 필드로 정렬하십시오.일부 DB는 계산 된 필드별로 직접 정렬 할 수 없지만 "select field, calcfield from calcfield by calcfield"와 같은 인라인보기로 사용할 수 있습니다. hth