2011-03-25 2 views
2

안녕하세요. 나는 몇 년 전의 사용자 활동 표를 가지고있다. 매일 8 시간 이상 검색을 수행 한 모든 사용자를 선택해야합니다. 누군가가 저에게 mysql을 사용하는 방법에 대한 조언을 해줄 수 있습니까? 테이블에 사용자 ID 쿼리 및 검색 날짜 (datetime)가 있습니다.mysql select 매일 8 시간 동안 결과가

사용자 activkty에 대해 하루 단위로 그룹화 할 수 있지만 실제로는 8 시간보다 긴 시간 동안 검색하는 모든 사용자가 필요합니다.

+1

데이터 샘플을 게시하십시오. – Smandoli

+0

@Smandoli 그는 사용자 ID와 검색 시간이 있다는 사실을 알려주었습니다. 나는 그 어떤 정보보다 더 많은 해결책이 필요하다고 확신하지 못합니다. – corsiKa

+0

명확히 할 수 있습니다 : 특정 8 시간 동안 검색 한 모든 사용자를 원하십니까? 또는 특정 날짜에 8 시간 이상 떨어져있는 search_dates를 가진 모든 사용자를 찾고 있습니까? 또는...? –

답변

0

이 작업을 한 번만 수행해야합니까? 에서 것과 같이, 그것은 버리는가? 그렇다면 실행 속도가 느리지 만 빠른 속도로 수행하는 것이 최선의 방법 일 수 있습니다.

일부 SQL-Guru가 원하는 것을 정확히 제공하는 단일 쿼리에서이 작업을 수행 할 수 있습니다.

그런 일이 발생하지 않는다면, 나는 데이터를 읽고 필터링하고 결과를 뱉어내는 (php/java/python/assembler/poison 선택) 스크립트/응용 프로그램을 함께 사용합니다. 빠르고 더러운, 일을 끝내. 시간이 너무 오래 걸리면 스크립트 속도를 높이거나 한 번의 쿼리에서 다시 수행하는 방법을 살펴보십시오.

SQL은 많은 것들을 위해 훌륭하지만 때로는 소프트웨어에서 그냥하는 것이 낫습니다. :-)

+0

"단일 쿼리에서이 작업을 수행하는 방법" 아마도 사실입니다. 데이터에 대한 더 많은 정보가 없다면 말할 수 없습니다. – Smandoli

+0

그래, 내가 이걸 알아 내려고 노력하면서 너무 많은 시간을 보냈는데, 아마 이것을 알아 내기 위해 자바로 앱을 작성해야만했을 것이다. 그러나 나는이 문제에 흥미가있다. – James

2

나는 당신이 "8 시간 이상 떨어져서 하루에 두 번 검색 한 모든 사용자를 찾으십시오."라고 생각합니다. 나는이 작업을 것 같아요 : 이것은 가정입니다

SELECT DISTINCT sr1.UserID, Date(sr1.Search_Date) AS Search_Date 
FROM SearchRecord sr1 
JOIN SearchRecord sr2 
    ON sr1.UserID = sr2.UserID 
    AND Date(sr1.Search_Date) = Date(sr2.Search_Date) 
    AND sr1.Search_Date > (sr2.Search_Date + INTERVAL 8 HOURS) 

내가 제대로 질문을 이해하고 내 MySQL의 구문은 (내가 요즘 주로 SQL Server를 사용) 맞습니다.

+0

나는 그것을 내 생각보다 더 좋아합니다. – corsiKa