2013-05-11 2 views
0

행 집합을 가져 오기 위해 쿼리하는 데 사용하는 날짜 열이있는 테이블이 있습니다.mySQL 현재 행의 날짜에 다음 및 이전 날짜 가져 오기

나는 언제든지 값 단지 날짜와 T를 저장하지 오전 : 00 : 00 : 00 내가 데이터를 가지고있는 다음 및 이전 일이 무엇인지 운동을 할 필요가

.

나는 하나의 쿼리를 할 수있을 싶어요 및 날짜 데이터의 마지막 세트를 얻을 수 있도록이 시작 현재의 데이터가

를 설정 선택 쿼리와 함께 다시 다음과 UI의 탐색을 사용하는

SELECT * 
FROM `newco_bh_price_data` 
WHERE `manager_id` =960 
AND `currency_id` =0 
AND `class_id` = 'A' 
AND `price_date` 
IN (SELECT MAX( `price_date`) 
FROM `newco_bh_price_data` 
) 

는 지금 내가 거기에 어떤 도움

SELECT * 
FROM `newco_bh_price_data` 
WHERE `manager_id` =960 
AND `currency_id` =0 
AND `class_id` = 'A' 
AND `price_date` = '2002-09-19' 

녀 mant 감사를 조회 할 수 있습니다 다음 날짜가 될 것입니다 무엇을 알아야하고

01 코멘트 23,516,

다음은 데이터

id price_date manager_id currency_id class_id value v_change 
554 2002-09-19 960 0 A 8.631 0 
553 2002-09-19 960 0 A 9.5635 0 
552 2002-09-18 960 0 A 9.1068 0 
551 2002-09-18 960 0 A 8.9351 0 
550 2002-09-18 960 0 A 9.61 0 
549 2002-09-17 960 0 A 9.1868 0 
548 2002-09-17 960 0 A 9.0201 0 
547 2002-09-17 960 0 A 9.6425 0 
546 2002-09-16 960 0 A 9.3377 0 
545 2002-09-16 960 0 A 9.3317 0 
544 2002-09-16 960 0 A 9.6902 0 
543 2002-09-13 960 0 A 9.418 0 
542 2002-09-13 960 0 A 9.3669 0 
541 2002-09-13 960 0 A 9.7125 0 
540 2002-09-12 960 0 A 9.4463 0 
539 2002-09-12 960 0 A 9.4383 0 
538 2002-09-12 960 0 A 9.7474 0 
537 2002-09-11 960 0 A 9.5303 0 
536 2002-09-11 960 0 A 9.6592 0 
535 2002-09-11 960 0 A 9.8041 0 
534 2002-09-10 960 0 A 9.4666 0 
533 2002-09-10 960 0 A 9.5878 0 
532 2002-09-10 960 0 A 9.7651 0 
531 2002-09-09 960 0 A 9.3104 0 
530 2002-09-09 960 0 A 9.4841 0 
529 2002-09-09 960 0 A 9.7498 0 
528 2002-09-06 960 0 A 9.2462 0 
527 2002-09-06 960 0 A 9.3823 0 
526 2002-09-06 960 0 A 9.7501 0 
525 2002-09-05 960 0 A 9.0465 0 

답변

0

당신이 정말로 lag()lead()입니다 원하는 기능의 샘플입니다. 그러나, 아아, 이것들은 MySQL에서는 사용할 수 없습니다. 나는 그것들을 구현하는 가장 쉬운 방법은 상관 된 서브 쿼리를 사용하는 것이라고 생각한다.

SELECT *, 
     (select price_date 
     from newco_bh_price_data pd1 
     where pd1.manager_id = pd.manager_id and 
       pd1.currency_id = pd.currency_id and 
       pd1.class_id = pd.class_id and 
       pd1.price_date > pd.price_date 
     order by price_date 
     limit 1 
     ) as next_price_date, 
     (select price_date 
     from newco_bh_price_data pd1 
     where pd1.manager_id = pd.manager_id and 
       pd1.currency_id = pd.currency_id and 
       pd1.class_id = pd.class_id and 
       pd1.price_date < pd.price_date 
     order by price_date desc 
     limit 1 
     ) as prev_price_date 
FROM `newco_bh_price_data` pd 
WHERE `manager_id` =960 
AND `currency_id` =0 
AND `class_id` = 'A' 
AND `price_date` = '2002-09-19'; 

이것은 다음 및 이전 날짜를 찾을 때 당신이 관리자, 통화 및 클래스가 동일 할 것으로 가정 여기

은 예입니다.

0

검색어 :

SQLFIDDLEExample

SELECT t1.*, 
     (SELECT MIN(t2.`price_date`) 
     FROM `newco_bh_price_data` t2 
     WHERE t2.`price_date`> t1.`price_date` 
     AND t2.`manager_id`= t1.`manager_id` 
     AND t2.`currency_id` = t1.`currency_id` 
     AND t2.`class_id` = t1.`class_id` 
     ) AS NextDate, 
     (SELECT MAX(t2.`price_date`) 
     FROM `newco_bh_price_data` t2 
     WHERE t2.`price_date`< t1.`price_date` 
     AND t2.`manager_id`= t1.`manager_id` 
     AND t2.`currency_id` = t1.`currency_id` 
     AND t2.`class_id` = t1.`class_id` 
     ) AS PreviousDate 
FROM `newco_bh_price_data` t1 
WHERE t1.`manager_id` =960 
AND t1.`currency_id` =0 
AND t1.`class_id` = 'A' 

결과 :

| ID |      PRICE_DATE | MANAGER_ID | CURRENCY_ID | CLASS_ID | VALUE | V_CHANGE |       NEXTDATE |      PREVIOUSDATE | 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
| 554 | September, 19 2002 00:00:00+0000 |  960 |   0 |  A |  9 |  0 |       (null) | September, 18 2002 00:00:00+0000 | 
| 553 | September, 19 2002 00:00:00+0000 |  960 |   0 |  A | 10 |  0 |       (null) | September, 18 2002 00:00:00+0000 | 
| 552 | September, 18 2002 00:00:00+0000 |  960 |   0 |  A |  9 |  0 | September, 19 2002 00:00:00+0000 | September, 17 2002 00:00:00+0000 | 
| 551 | September, 18 2002 00:00:00+0000 |  960 |   0 |  A |  9 |  0 | September, 19 2002 00:00:00+0000 | September, 17 2002 00:00:00+0000 | 
| 550 | September, 18 2002 00:00:00+0000 |  960 |   0 |  A | 10 |  0 | September, 19 2002 00:00:00+0000 | September, 17 2002 00:00:00+0000 | 
| 549 | September, 17 2002 00:00:00+0000 |  960 |   0 |  A |  9 |  0 | September, 18 2002 00:00:00+0000 | September, 16 2002 00:00:00+0000 | 
| 548 | September, 17 2002 00:00:00+0000 |  960 |   0 |  A |  9 |  0 | September, 18 2002 00:00:00+0000 | September, 16 2002 00:00:00+0000 | 
관련 문제