过滤掉特定时期的一些记录

时间:2016-08-30 05:51:10

标签: sql-server

我有以下表结构,

Trans Table:

Trans_Id(PK)     User_Id(FK)       Arroved_Date
________________________________________________
1                   101             05-06-2016
2                   101             20-06-2016
3                   102             06-06-2016
4                   103             10-06-2016
5                   103             25-06-2016

表2:

Id(Pk)           User_Id(Fk)       Start_Date         End_Date
__________________________________________________________________
1                  101              01-06-2016         15-06-2016
2                  103              05-06-2016         20-06-2016

如果Approved_Date不在table2的用户Start_Date和End_Date之间,我想过滤掉该事务。

预期结果:

Trans_Id
________
2
3
5

6 个答案:

答案 0 :(得分:1)

此查询应该为您提供预期的结果:

select t1.trans_id from t1
left join t2
on t1.user_id=t2.user_id
where t2.id is null OR t1.Arroved_Date not between t2.Start_Date and t2.End_Date

答案 1 :(得分:0)

根据您的解释(而不是预期的结果),您需要在您指出的FK上加入两个表,以获得两个表中行之间的关系。

然后只需应用WHERE子句根据您的条件过滤行:

select t.trans_id
from trans t
    inner join table2 t2 on t.user_id = t2.user_id
where t.approved_date between t2.start_date and t2.end_date

答案 2 :(得分:0)

尝试 SELECT Trans_ID FROM Table1 JOIN Table2 ON Table1.User_Id=Table2.User_Id where Approved_date Between Start_Date And End_Date

答案 3 :(得分:0)

我不确定,但是你预期的输出......

SELECT distinct t1.Trans_ID
FROM Table1 t1
LEFT JOIN Table2 t2 on 1=1
where t1.Approved_date Between t2.Start_Date And t2.End_Date

答案 4 :(得分:0)

SELECT t.trans_id
FROM Trans tr
  LEFT JOIN Table2 t2 ON tr.User_id = t2.User_id
WHERE t2.id IS NULL
  OR t.Approved_Date IS NULL
  OR t2.Start_Date IS NULL
  OR t2.End_Date IS NULL 
  OR tr.Approved_Date <= t2.Start_Date
  OR tr.Approved_Date >= t2.End_Date

只有列可以为空时才需要进行空检查。如果每个事务在表2中都有对应的行,则左连接可以更改为内连接。答案假定表2中每个事务的行不超过一行。

答案 5 :(得分:0)

试试这个。

 private void setUpCamera(Camera c) {
    Camera.CameraInfo info = new Camera.CameraInfo();
    Camera.getCameraInfo(cameraId, info);
    rotation = getWindowManager().getDefaultDisplay().getRotation();
    int degree = 0;
    switch (rotation) {
        case Surface.ROTATION_0:
            degree = 0;
            break;
        case Surface.ROTATION_90:
            degree = 90;
            break;
        case Surface.ROTATION_180:
            degree = 180;
            break;
        case Surface.ROTATION_270:
            degree = 270;
            break;

        default:
            break;
    }

    if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
        // frontFacing
        rotation = (info.orientation + degree) % 330;
        rotation = (360 - rotation) % 360;
    } else {
        // Back-facing
        rotation = (info.orientation - degree + 360) % 360;
    }
    c.setDisplayOrientation(rotation);
    Parameters params = c.getParameters();
    params.setRotation(rotation);
}

Add these in surfaceChanged method for image clarity and other.

Camera.Parameters parameters = camera.getParameters();
    List<Camera.Size> sizes = parameters.getSupportedPictureSizes();
    Camera.Size size = sizes.get(0);
    for(int i=0;i<sizes.size();i++)
    {
        if(sizes.get(i).width > size.width)
            size = sizes.get(i);
    }
    parameters.setPictureSize(size.width, size.height);
    parameters.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
    parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
    parameters.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO);
    parameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
    parameters.setExposureCompensation(0);
    parameters.setPictureFormat(ImageFormat.JPEG);
    parameters.setJpegQuality(100);

    try{
        camera.setParameters(parameters);
        camera.startPreview();
    }catch (Exception e){
    }