ORACLE - 按十分钟分组

时间:2015-12-15 08:26:55

标签: sql oracle datetime group-by date-formatting

我的表中有一个time_part列,其时间格式为13:24。我想按时间分组每10分钟一次。如何将时间分组10分钟。

以下是查询:

time_part tran_time recon_date data 10:14 101425 13/12/2015 a 22:29 222939 13/12/2015 b 22:23 222342 13/12/2015 x 00:46 004615 13/12/2015 d 16:22 162259 13/12/2015 e 12:13 121344 13/12/2015 f 12:14 121410 13/12/2015 g 12:10 121008 13/12/2015 b 21:17 211732 13/12/2015 f 20:25 202511 13/12/2015 r

这是我的表格,tran_time ='hhmmss':

trantime   count(*)
000101     5
001101     4
002101     13
.
.
.
230101     5
231101     23

示例输出应该是那样的

ListName

2 个答案:

答案 0 :(得分:1)

在派生表中提取小时加上10分钟的部分。然后在外表中执行GROUP BY

select 10_min_part, count(*)
from
(
 SELECT substr(tran_time, 1, 3) as 10_min_part
 from tablename
) dt
group by 10_min_part

在SELECT列表中,您可以将001连结到10_min_part。 (现在我无法记住Oracle是如何做到的......)

答案 1 :(得分:0)

  • 首先,将时间部分分别存储为字符串是一种糟糕的设计。

  • 其次, DATE 始终包含日期和时间元素。您需要做的就是使用 TO_CHAR 和所需的格式模型,在需要时从日期中提取时间部分。

在您所说的评论time_part's data type is char , recon_date's data type is date中,recon_date表示SUBSTR包含日期和时间元素。因此,您不需要SELECT TO_CHAR(recon_date, 'mi'), COUNT(*) FROM your_table GROUP BY TO_CHAR(recon_date, 'mi'); ,只需在日期列中使用 TO_CHAR

    cv::Mat input = cv::imread("../inputData/rectangles.png");

    cv::Mat gray;
    cv::cvtColor(input,gray,CV_BGR2GRAY);

    // since your image has compression artifacts, we have to threshold the image
    int threshold = 200;
    cv::Mat mask = gray > threshold;

    cv::imshow("mask", mask);

    // extract contours
    std::vector<std::vector<cv::Point> > contours;
    cv::findContours(mask, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);

    for(int i=0; i<contours.size(); ++i)
    {
        // fit bounding rectangle around contour
        cv::RotatedRect rotatedRect = cv::minAreaRect(contours[i]);

        // read points and angle
        cv::Point2f rect_points[4]; 
        rotatedRect.points( rect_points );

        float  angle = rotatedRect.angle; // angle

        // read center of rotated rect
        cv::Point2f center = rotatedRect.center; // center

        // draw rotated rect
        for(unsigned int j=0; j<4; ++j)
            cv::line(input, rect_points[j], rect_points[(j+1)%4], cv::Scalar(0,255,0));

        // draw center and print text
        std::stringstream ss;   ss << angle; // convert float to string
        cv::circle(input, center, 5, cv::Scalar(0,255,0)); // draw center
        cv::putText(input, ss.str(), center + cv::Point2f(-25,25), cv::FONT_HERSHEY_COMPLEX_SMALL, 1, cv::Scalar(255,0,255)); // print angle
    }